http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/graph_legend.svg
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/graph_legend.svg b/docs/v1.9.1/graph_legend.svg
new file mode 100644
index 0000000..12d6a4d
--- /dev/null
+++ b/docs/v1.9.1/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="510pt" height="154pt"
+ viewBox="0.00 0.00 509.69 154.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 150)">
+<title>Graph Legend</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-150 505.687,-150 
505.687,4 -4,4"/>
+<!-- Node9 -->
+<g id="node1" class="node"><title>Node9</title>
+<polygon fill="#bfbfbf" stroke="black" points="293.431,-18 238.599,-18 
238.599,-0 293.431,-0 293.431,-18"/>
+<text text-anchor="middle" x="266.015" y="-6" 
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.044,-82 -0.0146549,-82 
-0.0146549,-64 66.044,-64 66.044,-82"/>
+<text text-anchor="middle" x="33.0146" y="-70" 
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="M73.3674,-61.2624C120.605,-48.6928 
197.564,-28.2142 238.451,-17.3346"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="72.239,-57.9407 
63.4753,-63.8946 74.0391,-64.7054 72.239,-57.9407"/>
+</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.1738,-146 2.85549,-146 
2.85549,-128 63.1738,-128 63.1738,-146"/>
+<text text-anchor="middle" x="33.0146" y="-134" 
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.0146,-117.828C33.0146,-106.079 
33.0146,-91.3449 33.0146,-82.3053"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="29.5147,-117.895 
33.0146,-127.895 36.5147,-117.895 29.5147,-117.895"/>
+</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.611,-82 84.4179,-82 
84.4179,-64 165.611,-64 165.611,-82"/>
+<text text-anchor="middle" x="125.015" y="-70" 
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="M152.713,-59.8204C180.778,-47.4799 
223.402,-28.7375 247.577,-18.1074"/>
+<polygon fill="darkgreen" stroke="darkgreen" points="151.193,-56.6654 
143.448,-63.8946 154.011,-63.0733 151.193,-56.6654"/>
+</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="253.931,-82 184.099,-82 
184.099,-64 253.931,-64 253.931,-82"/>
+<text text-anchor="middle" x="219.015" y="-70" 
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.432,-55.6198C240.534,-43.6129 
252.513,-27.8108 259.719,-18.3053"/>
+<polygon fill="#8b1a1a" stroke="#8b1a1a" points="228.411,-53.8111 
225.159,-63.8946 233.989,-58.0399 228.411,-53.8111"/>
+</g>
+<!-- Node15 -->
+<g id="node6" class="node"><title>Node15</title>
+<polygon fill="none" stroke="#bfbfbf" points="355.837,-82 272.192,-82 
272.192,-64 355.837,-64 355.837,-82"/>
+<text text-anchor="middle" x="314.015" y="-70" 
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.606,-55.9718C292.278,-43.9234 
279.876,-27.904 272.445,-18.3053"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="298.85,-58.1299 
307.739,-63.8946 304.385,-53.8447 298.85,-58.1299"/>
+</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="444.489,-82 373.54,-82 373.54,-64 
444.489,-64 444.489,-82"/>
+<text text-anchor="middle" x="409.015" y="-70" 
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="M380.923,-59.8204C352.46,-47.4799 
309.232,-28.7375 284.714,-18.1074"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="379.753,-63.1278 
390.32,-63.8946 382.537,-56.7055 379.753,-63.1278"/>
+</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="441.683,-146 376.346,-146 
376.346,-128 441.683,-128 441.683,-146"/>
+<text text-anchor="middle" x="409.015" y="-134" 
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="M409.015,-117.828C409.015,-106.079 409.015,-91.3449 409.015,-82.3053"/>
+<polygon fill="orange" stroke="orange" points="405.515,-117.895 
409.015,-127.895 412.515,-117.895 405.515,-117.895"/>
+<text text-anchor="middle" x="422.914" y="-102" 
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="501.861,-82 462.168,-82 
462.168,-64 501.861,-64 501.861,-82"/>
+<text text-anchor="middle" x="482.015" y="-70" 
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="M452.451,-63.5142C410.543,-51.4849 334.429,-29.6374 293.618,-17.9232"/>
+<polygon fill="#9a32cd" stroke="#9a32cd" points="451.504,-66.8834 
462.081,-66.2783 453.435,-60.1551 451.504,-66.8834"/>
+<text text-anchor="middle" x="417.305" y="-38" 
font-family="Helvetica,sans-Serif" font-size="10.00">m_usedClass</text>
+</g>
+</g>
+</svg>

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__arima.html
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__arima.html 
b/docs/v1.9.1/group__grp__arima.html
new file mode 100644
index 0000000..341d112
--- /dev/null
+++ b/docs/v1.9.1/group__grp__arima.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.10"/>
+<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);
+  $(window).load(resizeHeight);
+</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>
+<!-- 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.net');
+  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.net";><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.9.1</span>
+   </div>
+   <div id="projectbrief">User Documentation for 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.10 -->
+<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> </p><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">
+<img class="formulaDsp" alt="\[ (1 - \phi(B)) Y_t = (1 + \theta(B)) Z_t, \]" 
src="form_529.png"/>
+</p>
+</dd></dl>
+<p>where <img class="formulaInl" alt="$B$" src="form_206.png"/> is the 
backshift operator. The time <img class="formulaInl" alt="$ t $" 
src="form_530.png"/> is from <img class="formulaInl" alt="$ 1 $" 
src="form_531.png"/> to <img class="formulaInl" alt="$ N $" 
src="form_219.png"/>.</p>
+<p>ARIMA models involve the following variables:</p><ul>
+<li>The values of the time series: <img class="formulaInl" alt="$ X_t $" 
src="form_532.png"/>.</li>
+<li>Parameters of the model: <img class="formulaInl" alt="$ p $" 
src="form_110.png"/>, <img class="formulaInl" alt="$ q $" src="form_533.png"/>, 
and <img class="formulaInl" alt="$ d $" src="form_468.png"/>; <img 
class="formulaInl" alt="$ d $" src="form_468.png"/> is the differencing order, 
<img class="formulaInl" alt="$ p $" src="form_110.png"/> is the order of the AR 
operator, and <img class="formulaInl" alt="$ q $" src="form_533.png"/> is the 
order of the MA operator.</li>
+<li>The AR operator: <img class="formulaInl" alt="$ \phi(B) $" 
src="form_534.png"/>.</li>
+<li>The MA operator: <img class="formulaInl" alt="$ \theta(B) $" 
src="form_535.png"/>.</li>
+<li>The lag difference: <img class="formulaInl" alt="$ Y_{t} $" 
src="form_536.png"/>, where <img class="formulaInl" alt="$ Y_{t} = 
(1-B)^{d}(X_{t} - \mu) $" src="form_537.png"/>.</li>
+<li>The mean value: <img class="formulaInl" alt="$ \mu $" 
src="form_287.png"/>, which is set to be zero for <img class="formulaInl" 
alt="$ d>0 $" src="form_538.png"/> and estimated from the data when d=0.</li>
+<li>The error terms: <img class="formulaInl" alt="$ Z_t $" 
src="form_539.png"/>.</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 <img class="formulaInl" alt="$ p $" src="form_110.png"/> is 
defined as</p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ \phi(B) Y_t= \phi_1 Y_{t-1} + \dots + \phi_{p} 
Y_{t-p} \]" src="form_540.png"/>
+</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 <img 
class="formulaInl" alt="$ q $" src="form_533.png"/> is defined as</p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ \theta(B) Z_t = \theta_{1} Z_{t-1} + \dots + 
\theta_{q} Z_{t-q}. \]" src="form_541.png"/>
+</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 <img 
class="formulaInl" alt="$\tau, \epsilon_1, \epsilon_2, \epsilon_3,$" 
src="form_542.png"/>.</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 Tue Sep 20 2016 11:27:01 for MADlib by
+    <a href="http://www.doxygen.org/index.html";>
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
+  </ul>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__array.html
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__array.html 
b/docs/v1.9.1/group__grp__array.html
new file mode 100644
index 0000000..ed276e6
--- /dev/null
+++ b/docs/v1.9.1/group__grp__array.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.10"/>
+<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);
+  $(window).load(resizeHeight);
+</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>
+<!-- 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.net');
+  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.net";><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.9.1</span>
+   </div>
+   <div id="projectbrief">User Documentation for 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.10 -->
+<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> </p><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. 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>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>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.  
</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>
+</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 Tue Sep 20 2016 11:27:01 for MADlib by
+    <a href="http://www.doxygen.org/index.html";>
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
+  </ul>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__arraysmatrix.html
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__arraysmatrix.html 
b/docs/v1.9.1/group__grp__arraysmatrix.html
new file mode 100644
index 0000000..e7615a5
--- /dev/null
+++ b/docs/v1.9.1/group__grp__arraysmatrix.html
@@ -0,0 +1,170 @@
+<!-- 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.10"/>
+<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);
+  $(window).load(resizeHeight);
+</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>
+<!-- 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.net');
+  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.net";><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.9.1</span>
+   </div>
+   <div id="projectbrief">User Documentation for 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.10 -->
+<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">Matrix Factorization 
methods including Singular Value Decomposition and Low-rank Matrix 
Factorization. <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 Tue Sep 20 2016 11:27:01 for MADlib by
+    <a href="http://www.doxygen.org/index.html";>
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
+  </ul>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__arraysmatrix.js
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__arraysmatrix.js 
b/docs/v1.9.1/group__grp__arraysmatrix.js
new file mode 100644
index 0000000..5e12094
--- /dev/null
+++ b/docs/v1.9.1/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

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__assoc__rules.html
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__assoc__rules.html 
b/docs/v1.9.1/group__grp__assoc__rules.html
new file mode 100644
index 0000000..9cc48c0
--- /dev/null
+++ b/docs/v1.9.1/group__grp__assoc__rules.html
@@ -0,0 +1,308 @@
+<!-- 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.10"/>
+<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);
+  $(window).load(resizeHeight);
+</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>
+<!-- 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.net');
+  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.net";><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.9.1</span>
+   </div>
+   <div id="projectbrief">User Documentation for 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.10 -->
+<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> </p><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="#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 customers' 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>
+     tran_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>Given any association rule "If X, then Y", the association rules function 
will also calculate the following metrics:</p><ul>
+<li>Support: The ratio of transactions that contain X to all transactions, T 
<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ S (X) = \frac{Total X}{Total transactions} \]" 
src="form_0.png"/>
+</p>
+</li>
+<li>Confidence: The ratio of transactions that contain <img class="formulaInl" 
alt="$ X,Y $" src="form_1.png"/> to transactions that contain <img 
class="formulaInl" alt="$ X $" src="form_2.png"/>. One could view this metric 
as the conditional probability of <img class="formulaInl" alt="$ Y $" 
src="form_3.png"/> , given <img class="formulaInl" alt="$ X $" 
src="form_2.png"/> . <img class="formulaInl" alt="$ P(Y|X) $" 
src="form_4.png"/> <p class="formulaDsp">
+<img class="formulaDsp" alt="\[ C (X \Rightarrow Y) = \frac{s(X \cap Y 
)}{s(X)} \]" src="form_5.png"/>
+</p>
+</li>
+<li>Lift: The ratio of observed support of <img class="formulaInl" alt="$ X,Y 
$" src="form_1.png"/> to the expected support of <img class="formulaInl" alt="$ 
X,Y $" src="form_1.png"/> , assuming <img class="formulaInl" alt="$ X $" 
src="form_2.png"/> and <img class="formulaInl" alt="$ Y $" src="form_3.png"/> 
are independent. <p class="formulaDsp">
+<img class="formulaDsp" alt="\[ L (X \Rightarrow Y) = \frac{s(X \cap Y )}{s(X) 
\cdot s(Y)} \]" src="form_6.png"/>
+</p>
+</li>
+<li><p class="startli">Conviction: The ratio of expected support of <img 
class="formulaInl" alt="$ X $" src="form_2.png"/> occurring without <img 
class="formulaInl" alt="$ Y $" src="form_3.png"/> assuming <img 
class="formulaInl" alt="$ X $" src="form_2.png"/> and <img class="formulaInl" 
alt="$ \neg Y $" src="form_7.png"/> are independent, to the observed support of 
<img class="formulaInl" alt="$ X $" src="form_2.png"/> occuring without <img 
class="formulaInl" alt="$ Y $" src="form_3.png"/>. If conviction is greater 
than 1, then this metric shows that incorrect predictions ( <img 
class="formulaInl" alt="$ X \Rightarrow Y $" src="form_8.png"/> ) 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">
+<img class="formulaDsp" alt="\[ Conv (X \Rightarrow Y) = \frac{1 - S(Y)}{1 - 
C(X \Rightarrow Y)} \]" src="form_9.png"/>
+</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 used is called Apriori (which we implemented in this module). 
It is a breadth-first search, as opposed to depth-first searches like eclat. 
Frequent itemsets of order <img class="formulaInl" alt="$ n $" 
src="form_10.png"/> are generated from sets of order <img class="formulaInl" 
alt="$ n - 1 $" src="form_11.png"/>. 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 is less than minimum support</li>
+</ol>
+<p><em>Main</em> <em>algorithm</em> </p><ol type="1">
+<li>For <img class="formulaInl" alt="$ n \ge 2 $" src="form_12.png"/>, 
generate itemsets of order <img class="formulaInl" alt="$ n $" 
src="form_10.png"/> by combining the itemsets of order <img class="formulaInl" 
alt="$ n - 1 $" src="form_11.png"/>. 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</li>
+</ol>
+<p><em>Association</em> <em>rule</em> <em>generation</em> </p>
+<p>Given a frequent itemset <img class="formulaInl" alt="$ A $" 
src="form_13.png"/> generated from the Apriori algorithm, and all subsets <img 
class="formulaInl" alt="$ B $" src="form_14.png"/> , we generate rules such 
that <img class="formulaInl" alt="$ B \Rightarrow (A - B) $" 
src="form_15.png"/> meets minimum confidence requirements.</p>
+<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Function 
Syntax</dt><dd>Association rules can be called with the following syntax. <pre 
class="syntax">
+assoc_rules( support,
+             confidence,
+             tid_col,
+             item_col,
+             input_table,
+             output_schema,
+             verbose
+           );</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">The 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">The 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">The name of the column storing the transaction ids.</p>
+<p class="enddd"></p>
+</dd>
+<dt>item_col </dt>
+<dd><p class="startdd">The name of the column storing the products.</p>
+<p class="enddd"></p>
+</dd>
+<dt>input_table </dt>
+<dd><p class="startdd">The 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. It is expected to be created before calling the function, or using 
<code>NULL</code> suggests the current schema will be used.</p>
+<p>The results containing the rules, support, 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>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 ruleid 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 mentioned in the about 
section. </p>
+<p class="enddd"></p>
+</dd>
+<dt>verbose </dt>
+<dd>BOOLEAN, default FALSE. Determines if the output contains comments. </dd>
+</dl>
+<p><a class="anchor" id="examples"></a></p><dl class="section 
user"><dt>Examples</dt><dd></dd></dl>
+<p>Let us take a 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 <img class="formulaInl" alt="$ min(support) = .25 $" 
src="form_16.png"/> and <img class="formulaInl" alt="$ min(confidence) = .5 $" 
src="form_17.png"/>, and the output schema be 'myschema'. For this example, we 
set verbose to TRUE so that we have some insight into the progress of the 
function. We can now generate association rules as follows: <pre 
class="example">
+SELECT * FROM madlib.assoc_rules( .25,
+                                  .5,
+                                  'trans_id',
+                                  'product',
+                                  'test_data',
+                                  'myschema',
+                                  TRUE
+                                );
+</pre> Result: <pre class="result">
+ output_schema | output_table | total_rules | total_time
+---------------+--------------+-------------+-----------------
+ myschema      | assoc_rules  |           7 | 00:00:03.162094
+(1 row)
+</pre> The association rules are stored in the myschema.assoc_rules table: 
<pre class="example">
+SELECT * FROM myschema.assoc_rules
+ORDER BY support DESC;
+</pre> Result: <pre class="result">
+ ruleid |       pre       |      post      |      support      |    confidence 
    |       lift        |    conviction
+--------+-----------------+----------------+-------------------+-------------------+-------------------+-------------------
+      4 | {diapers}       | {beer}         | 0.714285714285714 |               
  1 |                 1 |                 0
+      2 | {beer}          | {diapers}      | 0.714285714285714 | 
0.714285714285714 |                 1 |                 1
+      1 | {chips}         | {beer}         | 0.428571428571429 |               
  1 |                 1 |                 0
+      5 | {chips}         | {beer,diapers} | 0.285714285714286 | 
0.666666666666667 | 0.933333333333333 | 0.857142857142857
+      6 | {chips,beer}    | {diapers}      | 0.285714285714286 | 
0.666666666666667 | 0.933333333333333 | 0.857142857142857
+      7 | {chips,diapers} | {beer}         | 0.285714285714286 |               
  1 |                 1 |                 0
+      3 | {chips}         | {diapers}      | 0.285714285714286 | 
0.666666666666667 | 0.933333333333333 | 0.857142857142857
+(7 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.</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 Tue Sep 20 2016 11:27:01 for MADlib by
+    <a href="http://www.doxygen.org/index.html";>
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
+  </ul>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-madlib-site/blob/bed9253d/docs/v1.9.1/group__grp__association__rules.html
----------------------------------------------------------------------
diff --git a/docs/v1.9.1/group__grp__association__rules.html 
b/docs/v1.9.1/group__grp__association__rules.html
new file mode 100644
index 0000000..91fa398
--- /dev/null
+++ b/docs/v1.9.1/group__grp__association__rules.html
@@ -0,0 +1,134 @@
+<!-- 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.10"/>
+<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);
+  $(window).load(resizeHeight);
+</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>
+<!-- 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.net');
+  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.net";><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.9.1</span>
+   </div>
+   <div id="projectbrief">User Documentation for 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.10 -->
+<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>A collection of methods used to uncover interesting 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 Tue Sep 20 2016 11:27:01 for MADlib by
+    <a href="http://www.doxygen.org/index.html";>
+    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
+  </ul>
+</div>
+</body>
+</html>


Reply via email to