<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*-<a name="line.1"></a>
<span class="sourceLineNo">002</span> *******************************************************************************<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Copyright (c) 2011, 2016 Diamond Light Source Ltd.<a name="line.3"></a>
<span class="sourceLineNo">004</span> * All rights reserved. This program and the accompanying materials<a name="line.4"></a>
<span class="sourceLineNo">005</span> * are made available under the terms of the Eclipse Public License v1.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * which accompanies this distribution, and is available at<a name="line.6"></a>
<span class="sourceLineNo">007</span> * http://www.eclipse.org/legal/epl-v10.html<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> * Contributors:<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    Peter Chang - initial API and implementation and/or initial documentation<a name="line.10"></a>
<span class="sourceLineNo">011</span> *******************************************************************************/<a name="line.11"></a>
<span class="sourceLineNo">012</span><a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.eclipse.january.dataset;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>import java.io.Serializable;<a name="line.15"></a>
<span class="sourceLineNo">016</span><a name="line.16"></a>
<span class="sourceLineNo">017</span>import org.eclipse.january.IMonitor;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>/**<a name="line.19"></a>
<span class="sourceLineNo">020</span> * &lt;p&gt;<a name="line.20"></a>
<span class="sourceLineNo">021</span> * Interface for our implementation of dataset that adds a lot of extra functionality.<a name="line.21"></a>
<span class="sourceLineNo">022</span> * &lt;/p&gt;<a name="line.22"></a>
<span class="sourceLineNo">023</span> * &lt;p&gt;<a name="line.23"></a>
<span class="sourceLineNo">024</span> * &lt;b&gt;Warning:&lt;/b&gt;<a name="line.24"></a>
<span class="sourceLineNo">025</span> * It is important to note that methods (get*Abs() and set*Abs()) which use the absolute<a name="line.25"></a>
<span class="sourceLineNo">026</span> * index &lt;em&gt;must&lt;/em&gt; be used with care. In (sliced) views of datasets, neighbouring<a name="line.26"></a>
<span class="sourceLineNo">027</span> * positions do not necessarily correspond to contiguous indexes. This is also the case<a name="line.27"></a>
<span class="sourceLineNo">028</span> * with multi-element (or compound) items. Therefore index iterators should be used in<a name="line.28"></a>
<span class="sourceLineNo">029</span> * conjunction with these methods unless the dataset can be proven to be not a view or<a name="line.29"></a>
<span class="sourceLineNo">030</span> * be a wholly contiguous slice of a dataset; a copy or new dataset satisfies this criterion.<a name="line.30"></a>
<span class="sourceLineNo">031</span> * &lt;/p&gt;<a name="line.31"></a>
<span class="sourceLineNo">032</span> */<a name="line.32"></a>
<span class="sourceLineNo">033</span>public interface Dataset extends IDataset {<a name="line.33"></a>
<span class="sourceLineNo">034</span>        /**<a name="line.34"></a>
<span class="sourceLineNo">035</span>         * Boolean<a name="line.35"></a>
<span class="sourceLineNo">036</span>         */<a name="line.36"></a>
<span class="sourceLineNo">037</span>        public static final int BOOL = 0;<a name="line.37"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>        /**<a name="line.39"></a>
<span class="sourceLineNo">040</span>         * Signed 8-bit integer<a name="line.40"></a>
<span class="sourceLineNo">041</span>         */<a name="line.41"></a>
<span class="sourceLineNo">042</span>        public static final int INT8 = 1;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>        /**<a name="line.44"></a>
<span class="sourceLineNo">045</span>         * Signed 16-bit integer<a name="line.45"></a>
<span class="sourceLineNo">046</span>         */<a name="line.46"></a>
<span class="sourceLineNo">047</span>        public static final int INT16 = 2;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>        /**<a name="line.49"></a>
<span class="sourceLineNo">050</span>         * Signed 32-bit integer<a name="line.50"></a>
<span class="sourceLineNo">051</span>         */<a name="line.51"></a>
<span class="sourceLineNo">052</span>        public static final int INT32 = 3;<a name="line.52"></a>
<span class="sourceLineNo">053</span>        /**<a name="line.53"></a>
<span class="sourceLineNo">054</span>         * Integer (same as signed 32-bit integer)<a name="line.54"></a>
<span class="sourceLineNo">055</span>         */<a name="line.55"></a>
<span class="sourceLineNo">056</span>        public static final int INT = INT32;<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>        /**<a name="line.58"></a>
<span class="sourceLineNo">059</span>         * Signed 64-bit integer<a name="line.59"></a>
<span class="sourceLineNo">060</span>         */<a name="line.60"></a>
<span class="sourceLineNo">061</span>        public static final int INT64 = 4;<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>        /**<a name="line.63"></a>
<span class="sourceLineNo">064</span>         * 32-bit floating point<a name="line.64"></a>
<span class="sourceLineNo">065</span>         */<a name="line.65"></a>
<span class="sourceLineNo">066</span>        public static final int FLOAT32 = 5;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>        /**<a name="line.68"></a>
<span class="sourceLineNo">069</span>         * 64-bit floating point<a name="line.69"></a>
<span class="sourceLineNo">070</span>         */<a name="line.70"></a>
<span class="sourceLineNo">071</span>        public static final int FLOAT64 = 6;<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>        /**<a name="line.73"></a>
<span class="sourceLineNo">074</span>         * Floating point (same as 64-bit floating point)<a name="line.74"></a>
<span class="sourceLineNo">075</span>         */<a name="line.75"></a>
<span class="sourceLineNo">076</span>        public static final int FLOAT = FLOAT64;<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>        /**<a name="line.78"></a>
<span class="sourceLineNo">079</span>         * 64-bit complex floating point (real and imaginary parts are 32-bit floats)<a name="line.79"></a>
<span class="sourceLineNo">080</span>         */<a name="line.80"></a>
<span class="sourceLineNo">081</span>        public static final int COMPLEX64 = 7;<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>        /**<a name="line.83"></a>
<span class="sourceLineNo">084</span>         * 128-bit complex floating point (real and imaginary parts are 64-bit floats)<a name="line.84"></a>
<span class="sourceLineNo">085</span>         */<a name="line.85"></a>
<span class="sourceLineNo">086</span>        public static final int COMPLEX128 = 8;<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>        /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>         * Complex floating point (same as 64-bit floating point)<a name="line.89"></a>
<span class="sourceLineNo">090</span>         */<a name="line.90"></a>
<span class="sourceLineNo">091</span>        public static final int COMPLEX = COMPLEX128;<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>        /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>         * String<a name="line.94"></a>
<span class="sourceLineNo">095</span>         */<a name="line.95"></a>
<span class="sourceLineNo">096</span>        public static final int STRING = 9;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        <a name="line.97"></a>
<span class="sourceLineNo">098</span>        /**<a name="line.98"></a>
<span class="sourceLineNo">099</span>         * Object<a name="line.99"></a>
<span class="sourceLineNo">100</span>         */<a name="line.100"></a>
<span class="sourceLineNo">101</span>        public static final int OBJECT = 10;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span>        /**<a name="line.103"></a>
<span class="sourceLineNo">104</span>         * Date<a name="line.104"></a>
<span class="sourceLineNo">105</span>         */<a name="line.105"></a>
<span class="sourceLineNo">106</span>        public static final int DATE = 11;<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>        static final int ARRAYMUL = 100;<a name="line.108"></a>
<span class="sourceLineNo">109</span><a name="line.109"></a>
<span class="sourceLineNo">110</span>        /**<a name="line.110"></a>
<span class="sourceLineNo">111</span>         * Array of signed 8-bit integers<a name="line.111"></a>
<span class="sourceLineNo">112</span>         */<a name="line.112"></a>
<span class="sourceLineNo">113</span>        public static final int ARRAYINT8 = ARRAYMUL * INT8;<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>        /**<a name="line.115"></a>
<span class="sourceLineNo">116</span>         * Array of signed 16-bit integers<a name="line.116"></a>
<span class="sourceLineNo">117</span>         */<a name="line.117"></a>
<span class="sourceLineNo">118</span>        public static final int ARRAYINT16 = ARRAYMUL * INT16;<a name="line.118"></a>
<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span>        /**<a name="line.120"></a>
<span class="sourceLineNo">121</span>         * Array of three signed 16-bit integers for RGB values<a name="line.121"></a>
<span class="sourceLineNo">122</span>         */<a name="line.122"></a>
<span class="sourceLineNo">123</span>        public static final int RGB = ARRAYINT16 + 3;<a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124"></a>
<span class="sourceLineNo">125</span>        /**<a name="line.125"></a>
<span class="sourceLineNo">126</span>         * Array of signed 32-bit integers<a name="line.126"></a>
<span class="sourceLineNo">127</span>         */<a name="line.127"></a>
<span class="sourceLineNo">128</span>        public static final int ARRAYINT32 = ARRAYMUL * INT32;<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>        /**<a name="line.130"></a>
<span class="sourceLineNo">131</span>         * Array of signed 64-bit integers<a name="line.131"></a>
<span class="sourceLineNo">132</span>         */<a name="line.132"></a>
<span class="sourceLineNo">133</span>        public static final int ARRAYINT64 = ARRAYMUL * INT64;<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>        /**<a name="line.135"></a>
<span class="sourceLineNo">136</span>         * Array of 32-bit floating points<a name="line.136"></a>
<span class="sourceLineNo">137</span>         */<a name="line.137"></a>
<span class="sourceLineNo">138</span>        public static final int ARRAYFLOAT32 = ARRAYMUL * FLOAT32;<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>        /**<a name="line.140"></a>
<span class="sourceLineNo">141</span>         * Array of 64-bit floating points<a name="line.141"></a>
<span class="sourceLineNo">142</span>         */<a name="line.142"></a>
<span class="sourceLineNo">143</span>        public static final int ARRAYFLOAT64 = ARRAYMUL * FLOAT64;<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>        /**<a name="line.145"></a>
<span class="sourceLineNo">146</span>         * Update this when there are any serious changes to API<a name="line.146"></a>
<span class="sourceLineNo">147</span>         */<a name="line.147"></a>
<span class="sourceLineNo">148</span>        static final long serialVersionUID = -6891075135217265625L;<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>        /**<a name="line.150"></a>
<span class="sourceLineNo">151</span>         * The shape (or array of lengths for each dimension) of the dataset can be empty for zero-rank<a name="line.151"></a>
<span class="sourceLineNo">152</span>         * datasets and null for null datasets<a name="line.152"></a>
<span class="sourceLineNo">153</span>         * <a name="line.153"></a>
<span class="sourceLineNo">154</span>         * @return reference of shape of dataset<a name="line.154"></a>
<span class="sourceLineNo">155</span>         */<a name="line.155"></a>
<span class="sourceLineNo">156</span>        public int[] getShapeRef();<a name="line.156"></a>
<span class="sourceLineNo">157</span><a name="line.157"></a>
<span class="sourceLineNo">158</span>        /**<a name="line.158"></a>
<span class="sourceLineNo">159</span>         * @return type of dataset item<a name="line.159"></a>
<span class="sourceLineNo">160</span>         */<a name="line.160"></a>
<span class="sourceLineNo">161</span>        public int getDType();<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>        /**<a name="line.163"></a>
<span class="sourceLineNo">164</span>         * @return a stride array (can be null)<a name="line.164"></a>
<span class="sourceLineNo">165</span>         */<a name="line.165"></a>
<span class="sourceLineNo">166</span>        public int[] getStrides();<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>        /**<a name="line.168"></a>
<span class="sourceLineNo">169</span>         * @return offset where dataset view begins<a name="line.169"></a>
<span class="sourceLineNo">170</span>         */<a name="line.170"></a>
<span class="sourceLineNo">171</span>        public int getOffset();<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>        /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>         * @return true if dataset has elements which are floating point values<a name="line.174"></a>
<span class="sourceLineNo">175</span>         */<a name="line.175"></a>
<span class="sourceLineNo">176</span>        public boolean hasFloatingPointElements();<a name="line.176"></a>
<span class="sourceLineNo">177</span><a name="line.177"></a>
<span class="sourceLineNo">178</span>        /**<a name="line.178"></a>
<span class="sourceLineNo">179</span>         * @return number of bytes used<a name="line.179"></a>
<span class="sourceLineNo">180</span>         */<a name="line.180"></a>
<span class="sourceLineNo">181</span>        public int getNbytes();<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>        /**<a name="line.183"></a>
<span class="sourceLineNo">184</span>         * @return the buffer that backs the dataset<a name="line.184"></a>
<span class="sourceLineNo">185</span>         */<a name="line.185"></a>
<span class="sourceLineNo">186</span>        public Serializable getBuffer();<a name="line.186"></a>
<span class="sourceLineNo">187</span><a name="line.187"></a>
<span class="sourceLineNo">188</span>        /**<a name="line.188"></a>
<span class="sourceLineNo">189</span>         * Set the buffer that backs the dataset and its shape<a name="line.189"></a>
<span class="sourceLineNo">190</span>         * &lt;p&gt;This is very, very &lt;b&gt;dangerous&lt;/b&gt;. Please use carefully<a name="line.190"></a>
<span class="sourceLineNo">191</span>         * @param buffer (can be null to leave unchanged)<a name="line.191"></a>
<span class="sourceLineNo">192</span>         * @param shape (can be null to leave unchanged)<a name="line.192"></a>
<span class="sourceLineNo">193</span>         */<a name="line.193"></a>
<span class="sourceLineNo">194</span>        public void overrideInternal(Serializable buffer, int... shape);<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>        /**<a name="line.196"></a>
<span class="sourceLineNo">197</span>         * This is a &lt;b&gt;synchronized&lt;/b&gt; version of the clone method<a name="line.197"></a>
<span class="sourceLineNo">198</span>         * <a name="line.198"></a>
<span class="sourceLineNo">199</span>         * @return a copy of dataset<a name="line.199"></a>
<span class="sourceLineNo">200</span>         */<a name="line.200"></a>
<span class="sourceLineNo">201</span>        public Dataset synchronizedCopy();<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>        /**<a name="line.203"></a>
<span class="sourceLineNo">204</span>         * @param deepCopyMetadata if true then deep-copy metadata<a name="line.204"></a>
<span class="sourceLineNo">205</span>         * @return whole view of dataset (i.e. data buffer is shared)<a name="line.205"></a>
<span class="sourceLineNo">206</span>         */<a name="line.206"></a>
<span class="sourceLineNo">207</span>        public Dataset getView(boolean deepCopyMetadata);<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>        /**<a name="line.209"></a>
<span class="sourceLineNo">210</span>         * @param shape<a name="line.210"></a>
<span class="sourceLineNo">211</span>         * @return view of dataset that is broadcasted to given shape<a name="line.211"></a>
<span class="sourceLineNo">212</span>         */<a name="line.212"></a>
<span class="sourceLineNo">213</span>        public Dataset getBroadcastView(int... shape);<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>        /**<a name="line.215"></a>
<span class="sourceLineNo">216</span>         * @param showData<a name="line.216"></a>
<span class="sourceLineNo">217</span>         * @return string representation<a name="line.217"></a>
<span class="sourceLineNo">218</span>         */<a name="line.218"></a>
<span class="sourceLineNo">219</span>        public String toString(boolean showData);<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>        @Override<a name="line.221"></a>
<span class="sourceLineNo">222</span>        public Dataset squeezeEnds();<a name="line.222"></a>
<span class="sourceLineNo">223</span><a name="line.223"></a>
<span class="sourceLineNo">224</span>        @Override<a name="line.224"></a>
<span class="sourceLineNo">225</span>        public Dataset squeeze();<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>        @Override<a name="line.227"></a>
<span class="sourceLineNo">228</span>        public Dataset squeeze(boolean onlyFromEnds);<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>        @Override<a name="line.230"></a>
<span class="sourceLineNo">231</span>        public Dataset clone();<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>        /**<a name="line.233"></a>
<span class="sourceLineNo">234</span>         * This method allows anything that dirties the dataset to clear various metadata values<a name="line.234"></a>
<span class="sourceLineNo">235</span>         * so that the other methods can work correctly.<a name="line.235"></a>
<span class="sourceLineNo">236</span>         */<a name="line.236"></a>
<span class="sourceLineNo">237</span>        public void setDirty();<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>        /**<a name="line.239"></a>
<span class="sourceLineNo">240</span>         * This method calculates the n-dimensional position in the dataset of<a name="line.240"></a>
<span class="sourceLineNo">241</span>         * the given index in the data array<a name="line.241"></a>
<span class="sourceLineNo">242</span>         * <a name="line.242"></a>
<span class="sourceLineNo">243</span>         * @param n<a name="line.243"></a>
<span class="sourceLineNo">244</span>         *            The index in the array<a name="line.244"></a>
<span class="sourceLineNo">245</span>         * @return the corresponding [a,b,...,n] position in the dataset<a name="line.245"></a>
<span class="sourceLineNo">246</span>         */<a name="line.246"></a>
<span class="sourceLineNo">247</span>        public int[] getNDPosition(int n);<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>        /**<a name="line.249"></a>
<span class="sourceLineNo">250</span>         * This method calculates the index in the data array that corresponds to<a name="line.250"></a>
<span class="sourceLineNo">251</span>         * the given n-dimensional position<a name="line.251"></a>
<span class="sourceLineNo">252</span>         * <a name="line.252"></a>
<span class="sourceLineNo">253</span>         * @param n<a name="line.253"></a>
<span class="sourceLineNo">254</span>         *            the integer array specifying the n-D position<a name="line.254"></a>
<span class="sourceLineNo">255</span>         * @return the index on the data array corresponding to that location<a name="line.255"></a>
<span class="sourceLineNo">256</span>         */<a name="line.256"></a>
<span class="sourceLineNo">257</span>        public int get1DIndex(final int... n);<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>        /**<a name="line.259"></a>
<span class="sourceLineNo">260</span>         * Check that axis is in range [-rank,rank)<a name="line.260"></a>
<span class="sourceLineNo">261</span>         * <a name="line.261"></a>
<span class="sourceLineNo">262</span>         * @param axis<a name="line.262"></a>
<span class="sourceLineNo">263</span>         * @return sanitized axis in range [0, rank)<a name="line.263"></a>
<span class="sourceLineNo">264</span>         */<a name="line.264"></a>
<span class="sourceLineNo">265</span>        public int checkAxis(int axis);<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span>        /**<a name="line.267"></a>
<span class="sourceLineNo">268</span>         * This method takes a dataset and checks its shape against the current dataset. If they are<a name="line.268"></a>
<span class="sourceLineNo">269</span>         * both of the same size, then this returns true otherwise it returns false.<a name="line.269"></a>
<span class="sourceLineNo">270</span>         * <a name="line.270"></a>
<span class="sourceLineNo">271</span>         * @param g<a name="line.271"></a>
<span class="sourceLineNo">272</span>         *            The dataset to be compared<a name="line.272"></a>
<span class="sourceLineNo">273</span>         * @return true if shapes are compatible<a name="line.273"></a>
<span class="sourceLineNo">274</span>         */<a name="line.274"></a>
<span class="sourceLineNo">275</span>        public boolean isCompatibleWith(ILazyDataset g);<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span>        /**<a name="line.277"></a>
<span class="sourceLineNo">278</span>         * This method takes a dataset and checks its shape against the current dataset. If they are<a name="line.278"></a>
<span class="sourceLineNo">279</span>         * both of the same size, then this returns with no error, if there is a problem, then an error<a name="line.279"></a>
<span class="sourceLineNo">280</span>         * is thrown.<a name="line.280"></a>
<span class="sourceLineNo">281</span>         * <a name="line.281"></a>
<span class="sourceLineNo">282</span>         * @param g<a name="line.282"></a>
<span class="sourceLineNo">283</span>         *            The dataset to be compared<a name="line.283"></a>
<span class="sourceLineNo">284</span>         * @throws IllegalArgumentException<a name="line.284"></a>
<span class="sourceLineNo">285</span>         *             This will be thrown if there is a problem with the compatibility<a name="line.285"></a>
<span class="sourceLineNo">286</span>         */<a name="line.286"></a>
<span class="sourceLineNo">287</span>        public void checkCompatibility(ILazyDataset g) throws IllegalArgumentException;<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>        /**<a name="line.289"></a>
<span class="sourceLineNo">290</span>         * Returns new dataset with new shape but old data if possible, otherwise a copy is made<a name="line.290"></a>
<span class="sourceLineNo">291</span>         * <a name="line.291"></a>
<span class="sourceLineNo">292</span>         * @param shape new shape<a name="line.292"></a>
<span class="sourceLineNo">293</span>         * @return reshaped dataset<a name="line.293"></a>
<span class="sourceLineNo">294</span>         */<a name="line.294"></a>
<span class="sourceLineNo">295</span>        public Dataset reshape(int... shape);<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>        /**<a name="line.297"></a>
<span class="sourceLineNo">298</span>         * @return true if dataset is complex<a name="line.298"></a>
<span class="sourceLineNo">299</span>         */<a name="line.299"></a>
<span class="sourceLineNo">300</span>        public boolean isComplex();<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>        /**<a name="line.302"></a>
<span class="sourceLineNo">303</span>         * @return real part of dataset (if necessary, as new dataset)<a name="line.303"></a>
<span class="sourceLineNo">304</span>         * @since 2.0<a name="line.304"></a>
<span class="sourceLineNo">305</span>         */<a name="line.305"></a>
<span class="sourceLineNo">306</span>        public Dataset getRealPart();<a name="line.306"></a>
<span class="sourceLineNo">307</span><a name="line.307"></a>
<span class="sourceLineNo">308</span>        /**<a name="line.308"></a>
<span class="sourceLineNo">309</span>         * @return real part of dataset as a view<a name="line.309"></a>
<span class="sourceLineNo">310</span>         */<a name="line.310"></a>
<span class="sourceLineNo">311</span>        public Dataset getRealView();<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>        /**<a name="line.313"></a>
<span class="sourceLineNo">314</span>         * Get the error array from the dataset of same shape. This will create a new dataset<a name="line.314"></a>
<span class="sourceLineNo">315</span>         * if the error set was of lower rank<a name="line.315"></a>
<span class="sourceLineNo">316</span>         *<a name="line.316"></a>
<span class="sourceLineNo">317</span>         * @return the dataset which contains the error information (can be null)<a name="line.317"></a>
<span class="sourceLineNo">318</span>         * @since 2.0<a name="line.318"></a>
<span class="sourceLineNo">319</span>         */<a name="line.319"></a>
<span class="sourceLineNo">320</span>        @Override<a name="line.320"></a>
<span class="sourceLineNo">321</span>        public Dataset getErrors();<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>        /**<a name="line.323"></a>
<span class="sourceLineNo">324</span>         * Get the (un-broadcasted) dataset that backs the (squared) error data<a name="line.324"></a>
<span class="sourceLineNo">325</span>         *<a name="line.325"></a>
<span class="sourceLineNo">326</span>         * @return the dataset which contains the (squared) error information (can be null)<a name="line.326"></a>
<span class="sourceLineNo">327</span>         */<a name="line.327"></a>
<span class="sourceLineNo">328</span>        public Dataset getErrorBuffer();<a name="line.328"></a>
<span class="sourceLineNo">329</span><a name="line.329"></a>
<span class="sourceLineNo">330</span>        /**<a name="line.330"></a>
<span class="sourceLineNo">331</span>         * Set the buffer that backs the (squared) error data<a name="line.331"></a>
<span class="sourceLineNo">332</span>         *<a name="line.332"></a>
<span class="sourceLineNo">333</span>         * @param buffer the buffer which contains the (squared) error information (can be null)<a name="line.333"></a>
<span class="sourceLineNo">334</span>         */<a name="line.334"></a>
<span class="sourceLineNo">335</span>        public void setErrorBuffer(Serializable buffer);<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>        /**<a name="line.337"></a>
<span class="sourceLineNo">338</span>         * Copy and cast a dataset<a name="line.338"></a>
<span class="sourceLineNo">339</span>         * <a name="line.339"></a>
<span class="sourceLineNo">340</span>         * @param dtype<a name="line.340"></a>
<span class="sourceLineNo">341</span>         *            dataset type<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * @return a converted copy of the dataset<a name="line.342"></a>
<span class="sourceLineNo">343</span>         * @deprecated Please use class-based method {@link Dataset#copy(Class)}<a name="line.343"></a>
<span class="sourceLineNo">344</span>         */<a name="line.344"></a>
<span class="sourceLineNo">345</span>        @Deprecated<a name="line.345"></a>
<span class="sourceLineNo">346</span>        public Dataset copy(int dtype);<a name="line.346"></a>
<span class="sourceLineNo">347</span><a name="line.347"></a>
<span class="sourceLineNo">348</span>        /**<a name="line.348"></a>
<span class="sourceLineNo">349</span>         * Copy and cast a dataset<a name="line.349"></a>
<span class="sourceLineNo">350</span>         * <a name="line.350"></a>
<span class="sourceLineNo">351</span>         * @param &lt;T&gt; dataset subclass<a name="line.351"></a>
<span class="sourceLineNo">352</span>         * @param clazz dataset class<a name="line.352"></a>
<span class="sourceLineNo">353</span>         * @return a converted copy of the dataset<a name="line.353"></a>
<span class="sourceLineNo">354</span>         */<a name="line.354"></a>
<span class="sourceLineNo">355</span>        public &lt;T extends Dataset&gt; T copy(Class&lt;T&gt; clazz);<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
<span class="sourceLineNo">357</span>        /**<a name="line.357"></a>
<span class="sourceLineNo">358</span>         * Cast a dataset<a name="line.358"></a>
<span class="sourceLineNo">359</span>         * <a name="line.359"></a>
<span class="sourceLineNo">360</span>         * @param dtype<a name="line.360"></a>
<span class="sourceLineNo">361</span>         *            dataset type<a name="line.361"></a>
<span class="sourceLineNo">362</span>         * @return a converted dataset<a name="line.362"></a>
<span class="sourceLineNo">363</span>         * @deprecated Please use class-based method {@link Dataset#cast(Class)}<a name="line.363"></a>
<span class="sourceLineNo">364</span>         */<a name="line.364"></a>
<span class="sourceLineNo">365</span>        @Deprecated<a name="line.365"></a>
<span class="sourceLineNo">366</span>        public Dataset cast(int dtype);<a name="line.366"></a>
<span class="sourceLineNo">367</span><a name="line.367"></a>
<span class="sourceLineNo">368</span>        /**<a name="line.368"></a>
<span class="sourceLineNo">369</span>         * Cast a dataset<a name="line.369"></a>
<span class="sourceLineNo">370</span>         * <a name="line.370"></a>
<span class="sourceLineNo">371</span>         * @param &lt;T&gt; dataset subclass<a name="line.371"></a>
<span class="sourceLineNo">372</span>         * @param clazz dataset class<a name="line.372"></a>
<span class="sourceLineNo">373</span>         * @return a converted dataset<a name="line.373"></a>
<span class="sourceLineNo">374</span>         */<a name="line.374"></a>
<span class="sourceLineNo">375</span>        public &lt;T extends Dataset&gt; T cast(Class&lt;T&gt; clazz);<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>        /**<a name="line.377"></a>
<span class="sourceLineNo">378</span>         * Cast a dataset<a name="line.378"></a>
<span class="sourceLineNo">379</span>         * <a name="line.379"></a>
<span class="sourceLineNo">380</span>         * @param isize<a name="line.380"></a>
<span class="sourceLineNo">381</span>         *            item size<a name="line.381"></a>
<span class="sourceLineNo">382</span>         * @param &lt;T&gt; dataset subclass<a name="line.382"></a>
<span class="sourceLineNo">383</span>         * @param repeat<a name="line.383"></a>
<span class="sourceLineNo">384</span>         * @return a converted dataset<a name="line.384"></a>
<span class="sourceLineNo">385</span>         * @since 2.3<a name="line.385"></a>
<span class="sourceLineNo">386</span>         */<a name="line.386"></a>
<span class="sourceLineNo">387</span>        public &lt;T extends Dataset&gt; T cast(int isize, Class&lt;T&gt; clazz, boolean repeat);<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>        /**<a name="line.389"></a>
<span class="sourceLineNo">390</span>         * Cast a dataset<a name="line.390"></a>
<span class="sourceLineNo">391</span>         * <a name="line.391"></a>
<span class="sourceLineNo">392</span>         * @param repeat<a name="line.392"></a>
<span class="sourceLineNo">393</span>         * @param dtype<a name="line.393"></a>
<span class="sourceLineNo">394</span>         *            dataset type<a name="line.394"></a>
<span class="sourceLineNo">395</span>         * @param isize<a name="line.395"></a>
<span class="sourceLineNo">396</span>         *            item size<a name="line.396"></a>
<span class="sourceLineNo">397</span>         * @return a converted dataset<a name="line.397"></a>
<span class="sourceLineNo">398</span>         * @deprecated Please use class-based method {@link Dataset#cast(int, Class, boolean))}<a name="line.398"></a>
<span class="sourceLineNo">399</span>         */<a name="line.399"></a>
<span class="sourceLineNo">400</span>        @Deprecated<a name="line.400"></a>
<span class="sourceLineNo">401</span>        public Dataset cast(boolean repeat, int dtype, int isize);<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>        /**<a name="line.403"></a>
<span class="sourceLineNo">404</span>         * Generate an index dataset for current dataset<a name="line.404"></a>
<span class="sourceLineNo">405</span>         * <a name="line.405"></a>
<span class="sourceLineNo">406</span>         * @return an index dataset<a name="line.406"></a>
<span class="sourceLineNo">407</span>         */<a name="line.407"></a>
<span class="sourceLineNo">408</span>        public IntegerDataset getIndices();<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>        @Override<a name="line.410"></a>
<span class="sourceLineNo">411</span>        public Dataset getTransposedView(int... axes);<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>        /**<a name="line.413"></a>
<span class="sourceLineNo">414</span>         * See {@link #getTransposedView}<a name="line.414"></a>
<span class="sourceLineNo">415</span>         * @param axes<a name="line.415"></a>
<span class="sourceLineNo">416</span>         * @return remapped copy of data<a name="line.416"></a>
<span class="sourceLineNo">417</span>         */<a name="line.417"></a>
<span class="sourceLineNo">418</span>        public Dataset transpose(int... axes);<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>        /**<a name="line.420"></a>
<span class="sourceLineNo">421</span>         * Swap two axes in dataset<a name="line.421"></a>
<span class="sourceLineNo">422</span>         * <a name="line.422"></a>
<span class="sourceLineNo">423</span>         * @param axis1<a name="line.423"></a>
<span class="sourceLineNo">424</span>         * @param axis2<a name="line.424"></a>
<span class="sourceLineNo">425</span>         * @return swapped view of dataset<a name="line.425"></a>
<span class="sourceLineNo">426</span>         */<a name="line.426"></a>
<span class="sourceLineNo">427</span>        public Dataset swapAxes(int axis1, int axis2);<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>        /**<a name="line.429"></a>
<span class="sourceLineNo">430</span>         * Flatten shape<a name="line.430"></a>
<span class="sourceLineNo">431</span>         * <a name="line.431"></a>
<span class="sourceLineNo">432</span>         * @return a flattened dataset which is a view if dataset is contiguous otherwise is a copy<a name="line.432"></a>
<span class="sourceLineNo">433</span>         */<a name="line.433"></a>
<span class="sourceLineNo">434</span>        public Dataset flatten();<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>        /**<a name="line.436"></a>
<span class="sourceLineNo">437</span>         * Get unique items<a name="line.437"></a>
<span class="sourceLineNo">438</span>         * @return a sorted dataset of unique items<a name="line.438"></a>
<span class="sourceLineNo">439</span>         */<a name="line.439"></a>
<span class="sourceLineNo">440</span>        public Dataset getUniqueItems();<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>        /**<a name="line.442"></a>
<span class="sourceLineNo">443</span>         * @param withPosition<a name="line.443"></a>
<span class="sourceLineNo">444</span>         *            set true if position is needed<a name="line.444"></a>
<span class="sourceLineNo">445</span>         * @return an IndexIterator tailored for this dataset<a name="line.445"></a>
<span class="sourceLineNo">446</span>         */<a name="line.446"></a>
<span class="sourceLineNo">447</span>        public IndexIterator getIterator(boolean withPosition);<a name="line.447"></a>
<span class="sourceLineNo">448</span><a name="line.448"></a>
<span class="sourceLineNo">449</span>        /**<a name="line.449"></a>
<span class="sourceLineNo">450</span>         * @return an IndexIterator tailored for this dataset<a name="line.450"></a>
<span class="sourceLineNo">451</span>         */<a name="line.451"></a>
<span class="sourceLineNo">452</span>        public IndexIterator getIterator();<a name="line.452"></a>
<span class="sourceLineNo">453</span><a name="line.453"></a>
<span class="sourceLineNo">454</span>        /**<a name="line.454"></a>
<span class="sourceLineNo">455</span>         * @param axes axes to omit from iterator<a name="line.455"></a>
<span class="sourceLineNo">456</span>         * @return a PositionIterator that misses out axes<a name="line.456"></a>
<span class="sourceLineNo">457</span>         */<a name="line.457"></a>
<span class="sourceLineNo">458</span>        public PositionIterator getPositionIterator(int... axes);<a name="line.458"></a>
<span class="sourceLineNo">459</span><a name="line.459"></a>
<span class="sourceLineNo">460</span>        /**<a name="line.460"></a>
<span class="sourceLineNo">461</span>         * @param start<a name="line.461"></a>
<span class="sourceLineNo">462</span>         *            specifies the starting indexes<a name="line.462"></a>
<span class="sourceLineNo">463</span>         * @param stop<a name="line.463"></a>
<span class="sourceLineNo">464</span>         *            specifies the stopping indexes (nb, these are &lt;b&gt;not&lt;/b&gt; included in the slice)<a name="line.464"></a>
<span class="sourceLineNo">465</span>         * @param step<a name="line.465"></a>
<span class="sourceLineNo">466</span>         *            specifies the steps in the slice<a name="line.466"></a>
<span class="sourceLineNo">467</span>         * @return an slice iterator that operates like an IndexIterator<a name="line.467"></a>
<span class="sourceLineNo">468</span>         */<a name="line.468"></a>
<span class="sourceLineNo">469</span>        public IndexIterator getSliceIterator(int[] start, int[] stop, int[] step);<a name="line.469"></a>
<span class="sourceLineNo">470</span><a name="line.470"></a>
<span class="sourceLineNo">471</span>        /**<a name="line.471"></a>
<span class="sourceLineNo">472</span>         * @param slice an n-D slice<a name="line.472"></a>
<span class="sourceLineNo">473</span>         * @return an slice iterator that operates like an IndexIterator<a name="line.473"></a>
<span class="sourceLineNo">474</span>         * @since 2.1<a name="line.474"></a>
<span class="sourceLineNo">475</span>         */<a name="line.475"></a>
<span class="sourceLineNo">476</span>        public IndexIterator getSliceIterator(SliceND slice);<a name="line.476"></a>
<span class="sourceLineNo">477</span><a name="line.477"></a>
<span class="sourceLineNo">478</span>        /**<a name="line.478"></a>
<span class="sourceLineNo">479</span>         * Get a slice iterator that is defined by a starting position and a set of axes to include<a name="line.479"></a>
<span class="sourceLineNo">480</span>         * <a name="line.480"></a>
<span class="sourceLineNo">481</span>         * @param pos<a name="line.481"></a>
<span class="sourceLineNo">482</span>         * @param axes<a name="line.482"></a>
<span class="sourceLineNo">483</span>         *            to include<a name="line.483"></a>
<span class="sourceLineNo">484</span>         * @return slice iterator<a name="line.484"></a>
<span class="sourceLineNo">485</span>         */<a name="line.485"></a>
<span class="sourceLineNo">486</span>        public SliceIterator getSliceIteratorFromAxes(int[] pos, boolean[] axes);<a name="line.486"></a>
<span class="sourceLineNo">487</span><a name="line.487"></a>
<span class="sourceLineNo">488</span>        /**<a name="line.488"></a>
<span class="sourceLineNo">489</span>         * Copy content from axes in given position to array<a name="line.489"></a>
<span class="sourceLineNo">490</span>         * <a name="line.490"></a>
<span class="sourceLineNo">491</span>         * @param pos<a name="line.491"></a>
<span class="sourceLineNo">492</span>         *            - null means position at origin<a name="line.492"></a>
<span class="sourceLineNo">493</span>         * @param axes<a name="line.493"></a>
<span class="sourceLineNo">494</span>         *            - true means copy<a name="line.494"></a>
<span class="sourceLineNo">495</span>         * @param dest<a name="line.495"></a>
<span class="sourceLineNo">496</span>         */<a name="line.496"></a>
<span class="sourceLineNo">497</span>        public void copyItemsFromAxes(int[] pos, boolean[] axes, Dataset dest);<a name="line.497"></a>
<span class="sourceLineNo">498</span><a name="line.498"></a>
<span class="sourceLineNo">499</span>        /**<a name="line.499"></a>
<span class="sourceLineNo">500</span>         * Set content on axes in given position to values in array<a name="line.500"></a>
<span class="sourceLineNo">501</span>         * <a name="line.501"></a>
<span class="sourceLineNo">502</span>         * @param pos<a name="line.502"></a>
<span class="sourceLineNo">503</span>         * @param axes<a name="line.503"></a>
<span class="sourceLineNo">504</span>         *            - true means copy<a name="line.504"></a>
<span class="sourceLineNo">505</span>         * @param src<a name="line.505"></a>
<span class="sourceLineNo">506</span>         */<a name="line.506"></a>
<span class="sourceLineNo">507</span>        public void setItemsOnAxes(int[] pos, boolean[] axes, Object src);<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>        /**<a name="line.509"></a>
<span class="sourceLineNo">510</span>         * Get an iterator that visits every item in this dataset where the corresponding item in<a name="line.510"></a>
<span class="sourceLineNo">511</span>         * choice dataset is true<a name="line.511"></a>
<span class="sourceLineNo">512</span>         * <a name="line.512"></a>
<span class="sourceLineNo">513</span>         * @param choice<a name="line.513"></a>
<span class="sourceLineNo">514</span>         * @return an iterator of dataset that visits items chosen by given choice dataset<a name="line.514"></a>
<span class="sourceLineNo">515</span>         */<a name="line.515"></a>
<span class="sourceLineNo">516</span>        public BooleanIterator getBooleanIterator(Dataset choice);<a name="line.516"></a>
<span class="sourceLineNo">517</span><a name="line.517"></a>
<span class="sourceLineNo">518</span>        /**<a name="line.518"></a>
<span class="sourceLineNo">519</span>         * Get an iterator that visits every item in this dataset where the corresponding item in<a name="line.519"></a>
<span class="sourceLineNo">520</span>         * choice dataset is given by value<a name="line.520"></a>
<span class="sourceLineNo">521</span>         * <a name="line.521"></a>
<span class="sourceLineNo">522</span>         * @param choice<a name="line.522"></a>
<span class="sourceLineNo">523</span>         * @param value<a name="line.523"></a>
<span class="sourceLineNo">524</span>         * @return an iterator of dataset that visits items chosen by given choice dataset<a name="line.524"></a>
<span class="sourceLineNo">525</span>         */<a name="line.525"></a>
<span class="sourceLineNo">526</span>        public BooleanIterator getBooleanIterator(Dataset choice, boolean value);<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>        /**<a name="line.528"></a>
<span class="sourceLineNo">529</span>         * This is modelled after the NumPy get item with a condition specified by a boolean dataset<a name="line.529"></a>
<span class="sourceLineNo">530</span>         *<a name="line.530"></a>
<span class="sourceLineNo">531</span>         * @param selection<a name="line.531"></a>
<span class="sourceLineNo">532</span>         *            a boolean dataset of same shape to use for selecting items<a name="line.532"></a>
<span class="sourceLineNo">533</span>         * @return The new selected dataset<a name="line.533"></a>
<span class="sourceLineNo">534</span>         */<a name="line.534"></a>
<span class="sourceLineNo">535</span>        public Dataset getByBoolean(Dataset selection);<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span>        /**<a name="line.537"></a>
<span class="sourceLineNo">538</span>         * This is modelled after the NumPy set item with a condition specified by a boolean dataset<a name="line.538"></a>
<span class="sourceLineNo">539</span>         *<a name="line.539"></a>
<span class="sourceLineNo">540</span>         * @param obj<a name="line.540"></a>
<span class="sourceLineNo">541</span>         *            specifies the object used to set the selected items<a name="line.541"></a>
<span class="sourceLineNo">542</span>         * @param selection<a name="line.542"></a>
<span class="sourceLineNo">543</span>         *            a boolean dataset of same shape to use for selecting items<a name="line.543"></a>
<span class="sourceLineNo">544</span>         * <a name="line.544"></a>
<span class="sourceLineNo">545</span>         * @return The dataset with modified content<a name="line.545"></a>
<span class="sourceLineNo">546</span>         */<a name="line.546"></a>
<span class="sourceLineNo">547</span>        public Dataset setByBoolean(Object obj, Dataset selection);<a name="line.547"></a>
<span class="sourceLineNo">548</span><a name="line.548"></a>
<span class="sourceLineNo">549</span>        /**<a name="line.549"></a>
<span class="sourceLineNo">550</span>         * This is modelled after the NumPy get item with an index dataset<a name="line.550"></a>
<span class="sourceLineNo">551</span>         *<a name="line.551"></a>
<span class="sourceLineNo">552</span>         * @param index<a name="line.552"></a>
<span class="sourceLineNo">553</span>         *            an integer dataset<a name="line.553"></a>
<span class="sourceLineNo">554</span>         * @return The new selected dataset by indices<a name="line.554"></a>
<span class="sourceLineNo">555</span>         */<a name="line.555"></a>
<span class="sourceLineNo">556</span>        public Dataset getBy1DIndex(IntegerDataset index);<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>        /**<a name="line.558"></a>
<span class="sourceLineNo">559</span>         * This is modelled after the NumPy get item with an array of indexing objects<a name="line.559"></a>
<span class="sourceLineNo">560</span>         *<a name="line.560"></a>
<span class="sourceLineNo">561</span>         * @param indexes<a name="line.561"></a>
<span class="sourceLineNo">562</span>         *            an array of integer dataset, boolean dataset, slices or null entries (same as<a name="line.562"></a>
<span class="sourceLineNo">563</span>         *            full slices)<a name="line.563"></a>
<span class="sourceLineNo">564</span>         * @return The new selected dataset by index<a name="line.564"></a>
<span class="sourceLineNo">565</span>         */<a name="line.565"></a>
<span class="sourceLineNo">566</span>        public Dataset getByIndexes(Object... indexes);<a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>        /**<a name="line.568"></a>
<span class="sourceLineNo">569</span>         * This is modelled after the NumPy set item with an index dataset<a name="line.569"></a>
<span class="sourceLineNo">570</span>         *<a name="line.570"></a>
<span class="sourceLineNo">571</span>         * @param obj<a name="line.571"></a>
<span class="sourceLineNo">572</span>         *            specifies the object used to set the selected items<a name="line.572"></a>
<span class="sourceLineNo">573</span>         * @param index<a name="line.573"></a>
<span class="sourceLineNo">574</span>         *            an integer dataset<a name="line.574"></a>
<span class="sourceLineNo">575</span>         * <a name="line.575"></a>
<span class="sourceLineNo">576</span>         * @return The dataset with modified content<a name="line.576"></a>
<span class="sourceLineNo">577</span>         */<a name="line.577"></a>
<span class="sourceLineNo">578</span>        public Dataset setBy1DIndex(Object obj, Dataset index);<a name="line.578"></a>
<span class="sourceLineNo">579</span><a name="line.579"></a>
<span class="sourceLineNo">580</span>        /**<a name="line.580"></a>
<span class="sourceLineNo">581</span>         * This is modelled after the NumPy set item with an array of indexing objects<a name="line.581"></a>
<span class="sourceLineNo">582</span>         *<a name="line.582"></a>
<span class="sourceLineNo">583</span>         * @param obj<a name="line.583"></a>
<span class="sourceLineNo">584</span>         *            specifies the object used to set the selected items<a name="line.584"></a>
<span class="sourceLineNo">585</span>         * @param indexes<a name="line.585"></a>
<span class="sourceLineNo">586</span>         *            an array of integer dataset, boolean dataset, slices or null entries (same as<a name="line.586"></a>
<span class="sourceLineNo">587</span>         *            full slices)<a name="line.587"></a>
<span class="sourceLineNo">588</span>         * <a name="line.588"></a>
<span class="sourceLineNo">589</span>         * @return The dataset with modified content<a name="line.589"></a>
<span class="sourceLineNo">590</span>         */<a name="line.590"></a>
<span class="sourceLineNo">591</span>        public Dataset setByIndexes(Object obj, Object... indexes);<a name="line.591"></a>
<span class="sourceLineNo">592</span><a name="line.592"></a>
<span class="sourceLineNo">593</span>        /**<a name="line.593"></a>
<span class="sourceLineNo">594</span>         * Fill dataset with given object<a name="line.594"></a>
<span class="sourceLineNo">595</span>         * <a name="line.595"></a>
<span class="sourceLineNo">596</span>         * @param obj<a name="line.596"></a>
<span class="sourceLineNo">597</span>         * @return filled dataset with each item being equal to the given object<a name="line.597"></a>
<span class="sourceLineNo">598</span>         */<a name="line.598"></a>
<span class="sourceLineNo">599</span>        public Dataset fill(Object obj);<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>        /**<a name="line.601"></a>
<span class="sourceLineNo">602</span>         * Get an element from given absolute index as a boolean. See warning in interface doc<a name="line.602"></a>
<span class="sourceLineNo">603</span>         * <a name="line.603"></a>
<span class="sourceLineNo">604</span>         * @param index<a name="line.604"></a>
<span class="sourceLineNo">605</span>         * @return element as boolean<a name="line.605"></a>
<span class="sourceLineNo">606</span>         */<a name="line.606"></a>
<span class="sourceLineNo">607</span>        public boolean getElementBooleanAbs(int index);<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>        /**<a name="line.609"></a>
<span class="sourceLineNo">610</span>         * Get an element from given absolute index as a double. See warning in interface doc<a name="line.610"></a>
<span class="sourceLineNo">611</span>         * <a name="line.611"></a>
<span class="sourceLineNo">612</span>         * @param index<a name="line.612"></a>
<span class="sourceLineNo">613</span>         * @return element as double<a name="line.613"></a>
<span class="sourceLineNo">614</span>         */<a name="line.614"></a>
<span class="sourceLineNo">615</span>        public double getElementDoubleAbs(int index);<a name="line.615"></a>
<span class="sourceLineNo">616</span><a name="line.616"></a>
<span class="sourceLineNo">617</span>        /**<a name="line.617"></a>
<span class="sourceLineNo">618</span>         * Get an element from given absolute index as a long. See warning in interface doc<a name="line.618"></a>
<span class="sourceLineNo">619</span>         * <a name="line.619"></a>
<span class="sourceLineNo">620</span>         * @param index<a name="line.620"></a>
<span class="sourceLineNo">621</span>         * @return element as long<a name="line.621"></a>
<span class="sourceLineNo">622</span>         */<a name="line.622"></a>
<span class="sourceLineNo">623</span>        public long getElementLongAbs(int index);<a name="line.623"></a>
<span class="sourceLineNo">624</span><a name="line.624"></a>
<span class="sourceLineNo">625</span>        /**<a name="line.625"></a>
<span class="sourceLineNo">626</span>         * Get an item from given absolute index as an object. See warning in interface doc<a name="line.626"></a>
<span class="sourceLineNo">627</span>         * <a name="line.627"></a>
<span class="sourceLineNo">628</span>         * @param index<a name="line.628"></a>
<span class="sourceLineNo">629</span>         * @return item<a name="line.629"></a>
<span class="sourceLineNo">630</span>         */<a name="line.630"></a>
<span class="sourceLineNo">631</span>        public Object getObjectAbs(int index);<a name="line.631"></a>
<span class="sourceLineNo">632</span><a name="line.632"></a>
<span class="sourceLineNo">633</span>        /**<a name="line.633"></a>
<span class="sourceLineNo">634</span>         * Get an item from given absolute index as a string. See warning in interface doc<a name="line.634"></a>
<span class="sourceLineNo">635</span>         * <a name="line.635"></a>
<span class="sourceLineNo">636</span>         * @param index<a name="line.636"></a>
<span class="sourceLineNo">637</span>         * @return item<a name="line.637"></a>
<span class="sourceLineNo">638</span>         */<a name="line.638"></a>
<span class="sourceLineNo">639</span>        public String getStringAbs(int index);<a name="line.639"></a>
<span class="sourceLineNo">640</span><a name="line.640"></a>
<span class="sourceLineNo">641</span>        /**<a name="line.641"></a>
<span class="sourceLineNo">642</span>         * Set an item at absolute index from an object. See warning in interface doc<a name="line.642"></a>
<span class="sourceLineNo">643</span>         * <a name="line.643"></a>
<span class="sourceLineNo">644</span>         * @param index<a name="line.644"></a>
<span class="sourceLineNo">645</span>         * @param obj<a name="line.645"></a>
<span class="sourceLineNo">646</span>         */<a name="line.646"></a>
<span class="sourceLineNo">647</span>        public void setObjectAbs(int index, Object obj);<a name="line.647"></a>
<span class="sourceLineNo">648</span><a name="line.648"></a>
<span class="sourceLineNo">649</span>        /**<a name="line.649"></a>
<span class="sourceLineNo">650</span>         * Get first item as an object. The dataset must not be null<a name="line.650"></a>
<span class="sourceLineNo">651</span>         * @return item<a name="line.651"></a>
<span class="sourceLineNo">652</span>         * @since 2.0<a name="line.652"></a>
<span class="sourceLineNo">653</span>         */<a name="line.653"></a>
<span class="sourceLineNo">654</span>        public Object getObject();<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
<span class="sourceLineNo">656</span>        /**<a name="line.656"></a>
<span class="sourceLineNo">657</span>         * Get an item from given position as an object. The dataset must be 1D<a name="line.657"></a>
<span class="sourceLineNo">658</span>         * @param i<a name="line.658"></a>
<span class="sourceLineNo">659</span>         * @return item<a name="line.659"></a>
<span class="sourceLineNo">660</span>         */<a name="line.660"></a>
<span class="sourceLineNo">661</span>        public Object getObject(final int i);<a name="line.661"></a>
<span class="sourceLineNo">662</span><a name="line.662"></a>
<span class="sourceLineNo">663</span>        /**<a name="line.663"></a>
<span class="sourceLineNo">664</span>         * Get an item from given position as an object. The dataset must be 2D<a name="line.664"></a>
<span class="sourceLineNo">665</span>         * @param i<a name="line.665"></a>
<span class="sourceLineNo">666</span>         * @param j<a name="line.666"></a>
<span class="sourceLineNo">667</span>         * @return item<a name="line.667"></a>
<span class="sourceLineNo">668</span>         */<a name="line.668"></a>
<span class="sourceLineNo">669</span>        public Object getObject(final int i, final int j);<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>        /**<a name="line.671"></a>
<span class="sourceLineNo">672</span>         * Get first item as a string. The dataset must not be null<a name="line.672"></a>
<span class="sourceLineNo">673</span>         * @return item<a name="line.673"></a>
<span class="sourceLineNo">674</span>         * @since 2.0<a name="line.674"></a>
<span class="sourceLineNo">675</span>         */<a name="line.675"></a>
<span class="sourceLineNo">676</span>        public String getString();<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
<span class="sourceLineNo">678</span>        /**<a name="line.678"></a>
<span class="sourceLineNo">679</span>         * Get an item from given position as a string. The dataset must be 1D<a name="line.679"></a>
<span class="sourceLineNo">680</span>         * @param i<a name="line.680"></a>
<span class="sourceLineNo">681</span>         * @return item<a name="line.681"></a>
<span class="sourceLineNo">682</span>         */<a name="line.682"></a>
<span class="sourceLineNo">683</span>        public String getString(final int i);<a name="line.683"></a>
<span class="sourceLineNo">684</span><a name="line.684"></a>
<span class="sourceLineNo">685</span>        /**<a name="line.685"></a>
<span class="sourceLineNo">686</span>         * Get an item from given position as a string. The dataset must be 2D<a name="line.686"></a>
<span class="sourceLineNo">687</span>         * @param i<a name="line.687"></a>
<span class="sourceLineNo">688</span>         * @param j<a name="line.688"></a>
<span class="sourceLineNo">689</span>         * @return item<a name="line.689"></a>
<span class="sourceLineNo">690</span>         */<a name="line.690"></a>
<span class="sourceLineNo">691</span>        public String getString(final int i, final int j);<a name="line.691"></a>
<span class="sourceLineNo">692</span><a name="line.692"></a>
<span class="sourceLineNo">693</span>        /**<a name="line.693"></a>
<span class="sourceLineNo">694</span>         * Get first item as a double. The dataset must not be null<a name="line.694"></a>
<span class="sourceLineNo">695</span>         * @return item<a name="line.695"></a>
<span class="sourceLineNo">696</span>         * @since 2.0<a name="line.696"></a>
<span class="sourceLineNo">697</span>         */<a name="line.697"></a>
<span class="sourceLineNo">698</span>        public double getDouble();<a name="line.698"></a>
<span class="sourceLineNo">699</span><a name="line.699"></a>
<span class="sourceLineNo">700</span>        /**<a name="line.700"></a>
<span class="sourceLineNo">701</span>         * Get an item from given position as a double. The dataset must be 1D<a name="line.701"></a>
<span class="sourceLineNo">702</span>         * @param i<a name="line.702"></a>
<span class="sourceLineNo">703</span>         * @return item<a name="line.703"></a>
<span class="sourceLineNo">704</span>         */<a name="line.704"></a>
<span class="sourceLineNo">705</span>        public double getDouble(final int i);<a name="line.705"></a>
<span class="sourceLineNo">706</span><a name="line.706"></a>
<span class="sourceLineNo">707</span>        /**<a name="line.707"></a>
<span class="sourceLineNo">708</span>         * Get an item from given position as a double. The dataset must be 2D<a name="line.708"></a>
<span class="sourceLineNo">709</span>         * @param i<a name="line.709"></a>
<span class="sourceLineNo">710</span>         * @param j<a name="line.710"></a>
<span class="sourceLineNo">711</span>         * @return item<a name="line.711"></a>
<span class="sourceLineNo">712</span>         */<a name="line.712"></a>
<span class="sourceLineNo">713</span>        public double getDouble(final int i, final int j);<a name="line.713"></a>
<span class="sourceLineNo">714</span><a name="line.714"></a>
<span class="sourceLineNo">715</span>        /**<a name="line.715"></a>
<span class="sourceLineNo">716</span>         * Get first item as a float. The dataset must not be null<a name="line.716"></a>
<span class="sourceLineNo">717</span>         * @return item<a name="line.717"></a>
<span class="sourceLineNo">718</span>         * @since 2.0<a name="line.718"></a>
<span class="sourceLineNo">719</span>         */<a name="line.719"></a>
<span class="sourceLineNo">720</span>        public float getFloat();<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>        /**<a name="line.722"></a>
<span class="sourceLineNo">723</span>         * Get an item from given position as a float. The dataset must be 1D<a name="line.723"></a>
<span class="sourceLineNo">724</span>         * @param i<a name="line.724"></a>
<span class="sourceLineNo">725</span>         * @return item<a name="line.725"></a>
<span class="sourceLineNo">726</span>         */<a name="line.726"></a>
<span class="sourceLineNo">727</span>        public float getFloat(final int i);<a name="line.727"></a>
<span class="sourceLineNo">728</span><a name="line.728"></a>
<span class="sourceLineNo">729</span>        /**<a name="line.729"></a>
<span class="sourceLineNo">730</span>         * Get an item from given position as a float. The dataset must be 2D<a name="line.730"></a>
<span class="sourceLineNo">731</span>         * @param i<a name="line.731"></a>
<span class="sourceLineNo">732</span>         * @param j<a name="line.732"></a>
<span class="sourceLineNo">733</span>         * @return item<a name="line.733"></a>
<span class="sourceLineNo">734</span>         */<a name="line.734"></a>
<span class="sourceLineNo">735</span>        public float getFloat(final int i, final int j);<a name="line.735"></a>
<span class="sourceLineNo">736</span><a name="line.736"></a>
<span class="sourceLineNo">737</span>        /**<a name="line.737"></a>
<span class="sourceLineNo">738</span>         * Get first item as a long. The dataset must not be null<a name="line.738"></a>
<span class="sourceLineNo">739</span>         * @return item<a name="line.739"></a>
<span class="sourceLineNo">740</span>         * @since 2.0<a name="line.740"></a>
<span class="sourceLineNo">741</span>         */<a name="line.741"></a>
<span class="sourceLineNo">742</span>        public long getLong();<a name="line.742"></a>
<span class="sourceLineNo">743</span><a name="line.743"></a>
<span class="sourceLineNo">744</span>        /**<a name="line.744"></a>
<span class="sourceLineNo">745</span>         * Get an item from given position as a long. The dataset must be 1D<a name="line.745"></a>
<span class="sourceLineNo">746</span>         * @param i<a name="line.746"></a>
<span class="sourceLineNo">747</span>         * @return item<a name="line.747"></a>
<span class="sourceLineNo">748</span>         */<a name="line.748"></a>
<span class="sourceLineNo">749</span>        public long getLong(final int i);<a name="line.749"></a>
<span class="sourceLineNo">750</span><a name="line.750"></a>
<span class="sourceLineNo">751</span>        /**<a name="line.751"></a>
<span class="sourceLineNo">752</span>         * Get an item from given position as a long. The dataset must be 2D<a name="line.752"></a>
<span class="sourceLineNo">753</span>         * @param i<a name="line.753"></a>
<span class="sourceLineNo">754</span>         * @param j<a name="line.754"></a>
<span class="sourceLineNo">755</span>         * @return item<a name="line.755"></a>
<span class="sourceLineNo">756</span>         */<a name="line.756"></a>
<span class="sourceLineNo">757</span>        public long getLong(final int i, final int j);<a name="line.757"></a>
<span class="sourceLineNo">758</span><a name="line.758"></a>
<span class="sourceLineNo">759</span>        /**<a name="line.759"></a>
<span class="sourceLineNo">760</span>         * Get first item as an int. The dataset must not be null<a name="line.760"></a>
<span class="sourceLineNo">761</span>         * @return item<a name="line.761"></a>
<span class="sourceLineNo">762</span>         * @since 2.0<a name="line.762"></a>
<span class="sourceLineNo">763</span>         */<a name="line.763"></a>
<span class="sourceLineNo">764</span>        public int getInt();<a name="line.764"></a>
<span class="sourceLineNo">765</span><a name="line.765"></a>
<span class="sourceLineNo">766</span>        /**<a name="line.766"></a>
<span class="sourceLineNo">767</span>         * Get an item from given position as an int. The dataset must be 1D<a name="line.767"></a>
<span class="sourceLineNo">768</span>         * @param i<a name="line.768"></a>
<span class="sourceLineNo">769</span>         * @return item<a name="line.769"></a>
<span class="sourceLineNo">770</span>         */<a name="line.770"></a>
<span class="sourceLineNo">771</span>        public int getInt(final int i);<a name="line.771"></a>
<span class="sourceLineNo">772</span><a name="line.772"></a>
<span class="sourceLineNo">773</span>        /**<a name="line.773"></a>
<span class="sourceLineNo">774</span>         * Get an item from given position as an int. The dataset must be 2D<a name="line.774"></a>
<span class="sourceLineNo">775</span>         * @param i<a name="line.775"></a>
<span class="sourceLineNo">776</span>         * @param j<a name="line.776"></a>
<span class="sourceLineNo">777</span>         * @return item<a name="line.777"></a>
<span class="sourceLineNo">778</span>         */<a name="line.778"></a>
<span class="sourceLineNo">779</span>        public int getInt(final int i, final int j);<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>        /**<a name="line.781"></a>
<span class="sourceLineNo">782</span>         * Get first item as a short. The dataset must not be null<a name="line.782"></a>
<span class="sourceLineNo">783</span>         * @return item<a name="line.783"></a>
<span class="sourceLineNo">784</span>         * @since 2.0<a name="line.784"></a>
<span class="sourceLineNo">785</span>         */<a name="line.785"></a>
<span class="sourceLineNo">786</span>        public short getShort();<a name="line.786"></a>
<span class="sourceLineNo">787</span><a name="line.787"></a>
<span class="sourceLineNo">788</span>        /**<a name="line.788"></a>
<span class="sourceLineNo">789</span>         * Get an item from given position as a short. The dataset must be 1D<a name="line.789"></a>
<span class="sourceLineNo">790</span>         * @param i<a name="line.790"></a>
<span class="sourceLineNo">791</span>         * @return item<a name="line.791"></a>
<span class="sourceLineNo">792</span>         */<a name="line.792"></a>
<span class="sourceLineNo">793</span>        public short getShort(final int i);<a name="line.793"></a>
<span class="sourceLineNo">794</span><a name="line.794"></a>
<span class="sourceLineNo">795</span>        /**<a name="line.795"></a>
<span class="sourceLineNo">796</span>         * Get an item from given position as a short. The dataset must be 2D<a name="line.796"></a>
<span class="sourceLineNo">797</span>         * @param i<a name="line.797"></a>
<span class="sourceLineNo">798</span>         * @param j<a name="line.798"></a>
<span class="sourceLineNo">799</span>         * @return item<a name="line.799"></a>
<span class="sourceLineNo">800</span>         */<a name="line.800"></a>
<span class="sourceLineNo">801</span>        public short getShort(final int i, final int j);<a name="line.801"></a>
<span class="sourceLineNo">802</span><a name="line.802"></a>
<span class="sourceLineNo">803</span>        /**<a name="line.803"></a>
<span class="sourceLineNo">804</span>         * Get first item as a byte. The dataset must not be null<a name="line.804"></a>
<span class="sourceLineNo">805</span>         * @return item<a name="line.805"></a>
<span class="sourceLineNo">806</span>         * @since 2.0<a name="line.806"></a>
<span class="sourceLineNo">807</span>         */<a name="line.807"></a>
<span class="sourceLineNo">808</span>        public byte getByte();<a name="line.808"></a>
<span class="sourceLineNo">809</span><a name="line.809"></a>
<span class="sourceLineNo">810</span>        /**<a name="line.810"></a>
<span class="sourceLineNo">811</span>         * Get an item from given position as a byte. The dataset must be 1D<a name="line.811"></a>
<span class="sourceLineNo">812</span>         * @param i<a name="line.812"></a>
<span class="sourceLineNo">813</span>         * @return item<a name="line.813"></a>
<span class="sourceLineNo">814</span>         */<a name="line.814"></a>
<span class="sourceLineNo">815</span>        public byte getByte(final int i);<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>        /**<a name="line.817"></a>
<span class="sourceLineNo">818</span>         * Get an item from given positionj as a byte. The dataset must be 2D<a name="line.818"></a>
<span class="sourceLineNo">819</span>         * @param i<a name="line.819"></a>
<span class="sourceLineNo">820</span>         * @param j<a name="line.820"></a>
<span class="sourceLineNo">821</span>         * @return item<a name="line.821"></a>
<span class="sourceLineNo">822</span>         */<a name="line.822"></a>
<span class="sourceLineNo">823</span>        public byte getByte(final int i, final int j);<a name="line.823"></a>
<span class="sourceLineNo">824</span><a name="line.824"></a>
<span class="sourceLineNo">825</span>        /**<a name="line.825"></a>
<span class="sourceLineNo">826</span>         * Get first item as a boolean. The dataset must not be null<a name="line.826"></a>
<span class="sourceLineNo">827</span>         * @return item<a name="line.827"></a>
<span class="sourceLineNo">828</span>         * @since 2.0<a name="line.828"></a>
<span class="sourceLineNo">829</span>         */<a name="line.829"></a>
<span class="sourceLineNo">830</span>        public boolean getBoolean();<a name="line.830"></a>
<span class="sourceLineNo">831</span><a name="line.831"></a>
<span class="sourceLineNo">832</span>        /**<a name="line.832"></a>
<span class="sourceLineNo">833</span>         * Get an item from given position as a boolean. The dataset must be 1D<a name="line.833"></a>
<span class="sourceLineNo">834</span>         * @param i<a name="line.834"></a>
<span class="sourceLineNo">835</span>         * @return item<a name="line.835"></a>
<span class="sourceLineNo">836</span>         */<a name="line.836"></a>
<span class="sourceLineNo">837</span>        public boolean getBoolean(final int i);<a name="line.837"></a>
<span class="sourceLineNo">838</span><a name="line.838"></a>
<span class="sourceLineNo">839</span>        /**<a name="line.839"></a>
<span class="sourceLineNo">840</span>         * Get an item from given position as a boolean. The dataset must be 2D<a name="line.840"></a>
<span class="sourceLineNo">841</span>         * @param i<a name="line.841"></a>
<span class="sourceLineNo">842</span>         * @param j<a name="line.842"></a>
<span class="sourceLineNo">843</span>         * @return item<a name="line.843"></a>
<span class="sourceLineNo">844</span>         */<a name="line.844"></a>
<span class="sourceLineNo">845</span>        public boolean getBoolean(final int i, final int j);<a name="line.845"></a>
<span class="sourceLineNo">846</span><a name="line.846"></a>
<span class="sourceLineNo">847</span>        /**<a name="line.847"></a>
<span class="sourceLineNo">848</span>         * Get the error for the first item. The dataset must not be null<a name="line.848"></a>
<span class="sourceLineNo">849</span>         * @return item<a name="line.849"></a>
<span class="sourceLineNo">850</span>         * @since 2.0<a name="line.850"></a>
<span class="sourceLineNo">851</span>         */<a name="line.851"></a>
<span class="sourceLineNo">852</span>        public double getError();<a name="line.852"></a>
<span class="sourceLineNo">853</span><a name="line.853"></a>
<span class="sourceLineNo">854</span>        /**<a name="line.854"></a>
<span class="sourceLineNo">855</span>         * Get the error for given position. The dataset must be 1D<a name="line.855"></a>
<span class="sourceLineNo">856</span>         * @param i<a name="line.856"></a>
<span class="sourceLineNo">857</span>         * @return error value (symmetric)<a name="line.857"></a>
<span class="sourceLineNo">858</span>         */<a name="line.858"></a>
<span class="sourceLineNo">859</span>        public double getError(final int i);<a name="line.859"></a>
<span class="sourceLineNo">860</span><a name="line.860"></a>
<span class="sourceLineNo">861</span>        /**<a name="line.861"></a>
<span class="sourceLineNo">862</span>         * Get the error for given position. The dataset must be 2D<a name="line.862"></a>
<span class="sourceLineNo">863</span>         * @param i<a name="line.863"></a>
<span class="sourceLineNo">864</span>         * @param j<a name="line.864"></a>
<span class="sourceLineNo">865</span>         * @return error value (symmetric)<a name="line.865"></a>
<span class="sourceLineNo">866</span>         */<a name="line.866"></a>
<span class="sourceLineNo">867</span>        public double getError(final int i, final int j);<a name="line.867"></a>
<span class="sourceLineNo">868</span><a name="line.868"></a>
<span class="sourceLineNo">869</span>        /**<a name="line.869"></a>
<span class="sourceLineNo">870</span>         * Get the error values for given position<a name="line.870"></a>
<span class="sourceLineNo">871</span>         * @param i<a name="line.871"></a>
<span class="sourceLineNo">872</span>         * @return the values of the error at this point (can be null when no error defined)<a name="line.872"></a>
<span class="sourceLineNo">873</span>         */<a name="line.873"></a>
<span class="sourceLineNo">874</span>        public double[] getErrorArray(final int i);<a name="line.874"></a>
<span class="sourceLineNo">875</span><a name="line.875"></a>
<span class="sourceLineNo">876</span>        /**<a name="line.876"></a>
<span class="sourceLineNo">877</span>         * Get the error values for given position<a name="line.877"></a>
<span class="sourceLineNo">878</span>         * @param i<a name="line.878"></a>
<span class="sourceLineNo">879</span>         * @param j<a name="line.879"></a>
<span class="sourceLineNo">880</span>         * @return the values of the error at this point (can be null when no error defined)<a name="line.880"></a>
<span class="sourceLineNo">881</span>         */<a name="line.881"></a>
<span class="sourceLineNo">882</span>        public double[] getErrorArray(final int i, final int j);<a name="line.882"></a>
<span class="sourceLineNo">883</span><a name="line.883"></a>
<span class="sourceLineNo">884</span>        /**<a name="line.884"></a>
<span class="sourceLineNo">885</span>         * Set the value given by object at the first position. The dataset must not be null<a name="line.885"></a>
<span class="sourceLineNo">886</span>         * @param obj<a name="line.886"></a>
<span class="sourceLineNo">887</span>         * @since 2.0<a name="line.887"></a>
<span class="sourceLineNo">888</span>         */<a name="line.888"></a>
<span class="sourceLineNo">889</span>        public void set(final Object obj);<a name="line.889"></a>
<span class="sourceLineNo">890</span><a name="line.890"></a>
<span class="sourceLineNo">891</span>        /**<a name="line.891"></a>
<span class="sourceLineNo">892</span>         * Set the value given by object at given position. The dataset must be 1D<a name="line.892"></a>
<span class="sourceLineNo">893</span>         * @param obj<a name="line.893"></a>
<span class="sourceLineNo">894</span>         * @param i<a name="line.894"></a>
<span class="sourceLineNo">895</span>         */<a name="line.895"></a>
<span class="sourceLineNo">896</span>        public void set(final Object obj, final int i);<a name="line.896"></a>
<span class="sourceLineNo">897</span><a name="line.897"></a>
<span class="sourceLineNo">898</span>        /**<a name="line.898"></a>
<span class="sourceLineNo">899</span>         * Set the value given by object at given position. The dataset must be 2D<a name="line.899"></a>
<span class="sourceLineNo">900</span>         * @param obj<a name="line.900"></a>
<span class="sourceLineNo">901</span>         * @param i<a name="line.901"></a>
<span class="sourceLineNo">902</span>         * @param j<a name="line.902"></a>
<span class="sourceLineNo">903</span>         */<a name="line.903"></a>
<span class="sourceLineNo">904</span>        public void set(final Object obj, final int i, final int j);<a name="line.904"></a>
<span class="sourceLineNo">905</span><a name="line.905"></a>
<span class="sourceLineNo">906</span>        /**<a name="line.906"></a>
<span class="sourceLineNo">907</span>         * In-place sort of dataset<a name="line.907"></a>
<span class="sourceLineNo">908</span>         * <a name="line.908"></a>
<span class="sourceLineNo">909</span>         * @param axis<a name="line.909"></a>
<span class="sourceLineNo">910</span>         *            to sort along. If null, then the flattened view is sorted<a name="line.910"></a>
<span class="sourceLineNo">911</span>         * @return sorted dataset<a name="line.911"></a>
<span class="sourceLineNo">912</span>         */<a name="line.912"></a>
<span class="sourceLineNo">913</span>        public Dataset sort(Integer axis);<a name="line.913"></a>
<span class="sourceLineNo">914</span><a name="line.914"></a>
<span class="sourceLineNo">915</span>        @Override<a name="line.915"></a>
<span class="sourceLineNo">916</span>        public Dataset getSlice(int[] start, int[] stop, int[] step);<a name="line.916"></a>
<span class="sourceLineNo">917</span><a name="line.917"></a>
<span class="sourceLineNo">918</span>        @Override<a name="line.918"></a>
<span class="sourceLineNo">919</span>        public Dataset getSlice(IMonitor mon, int[] start, int[] stop, int[] step);<a name="line.919"></a>
<span class="sourceLineNo">920</span><a name="line.920"></a>
<span class="sourceLineNo">921</span>        @Override<a name="line.921"></a>
<span class="sourceLineNo">922</span>        public Dataset getSlice(Slice... slice);<a name="line.922"></a>
<span class="sourceLineNo">923</span><a name="line.923"></a>
<span class="sourceLineNo">924</span>        @Override<a name="line.924"></a>
<span class="sourceLineNo">925</span>        public Dataset getSlice(IMonitor mon, Slice... slice);<a name="line.925"></a>
<span class="sourceLineNo">926</span><a name="line.926"></a>
<span class="sourceLineNo">927</span>        @Override<a name="line.927"></a>
<span class="sourceLineNo">928</span>        public Dataset getSlice(SliceND slice);<a name="line.928"></a>
<span class="sourceLineNo">929</span><a name="line.929"></a>
<span class="sourceLineNo">930</span>        @Override<a name="line.930"></a>
<span class="sourceLineNo">931</span>        public Dataset getSlice(IMonitor mon, SliceND slice);<a name="line.931"></a>
<span class="sourceLineNo">932</span><a name="line.932"></a>
<span class="sourceLineNo">933</span>        @Override<a name="line.933"></a>
<span class="sourceLineNo">934</span>        public Dataset getSliceView(int[] start, int[] stop, int[] step);<a name="line.934"></a>
<span class="sourceLineNo">935</span><a name="line.935"></a>
<span class="sourceLineNo">936</span>        @Override<a name="line.936"></a>
<span class="sourceLineNo">937</span>        public Dataset getSliceView(Slice... slice);<a name="line.937"></a>
<span class="sourceLineNo">938</span><a name="line.938"></a>
<span class="sourceLineNo">939</span>        @Override<a name="line.939"></a>
<span class="sourceLineNo">940</span>        public Dataset getSliceView(SliceND slice);<a name="line.940"></a>
<span class="sourceLineNo">941</span><a name="line.941"></a>
<span class="sourceLineNo">942</span>        /**<a name="line.942"></a>
<span class="sourceLineNo">943</span>         * This is modelled after the NumPy array slice<a name="line.943"></a>
<span class="sourceLineNo">944</span>         *<a name="line.944"></a>
<span class="sourceLineNo">945</span>         * @param obj<a name="line.945"></a>
<span class="sourceLineNo">946</span>         *            specifies the object used to set the specified slice<a name="line.946"></a>
<span class="sourceLineNo">947</span>         * @param start<a name="line.947"></a>
<span class="sourceLineNo">948</span>         *            specifies the starting indexes<a name="line.948"></a>
<span class="sourceLineNo">949</span>         * @param stop<a name="line.949"></a>
<span class="sourceLineNo">950</span>         *            specifies the stopping indexes (nb, these are &lt;b&gt;not&lt;/b&gt; included in the slice)<a name="line.950"></a>
<span class="sourceLineNo">951</span>         * @param step<a name="line.951"></a>
<span class="sourceLineNo">952</span>         *            specifies the steps in the slice<a name="line.952"></a>
<span class="sourceLineNo">953</span>         * <a name="line.953"></a>
<span class="sourceLineNo">954</span>         * @return The dataset with the sliced set to object<a name="line.954"></a>
<span class="sourceLineNo">955</span>         */<a name="line.955"></a>
<span class="sourceLineNo">956</span>        public Dataset setSlice(Object obj, int[] start, int[] stop, int[] step);<a name="line.956"></a>
<span class="sourceLineNo">957</span><a name="line.957"></a>
<span class="sourceLineNo">958</span>        /**<a name="line.958"></a>
<span class="sourceLineNo">959</span>         * This is modelled after the NumPy array slice<a name="line.959"></a>
<span class="sourceLineNo">960</span>         * <a name="line.960"></a>
<span class="sourceLineNo">961</span>         * @param obj<a name="line.961"></a>
<span class="sourceLineNo">962</span>         * @param slice<a name="line.962"></a>
<span class="sourceLineNo">963</span>         */<a name="line.963"></a>
<span class="sourceLineNo">964</span>        public Dataset setSlice(Object obj, Slice... slice);<a name="line.964"></a>
<span class="sourceLineNo">965</span><a name="line.965"></a>
<span class="sourceLineNo">966</span>        /**<a name="line.966"></a>
<span class="sourceLineNo">967</span>         * This is modelled after the NumPy array slice<a name="line.967"></a>
<span class="sourceLineNo">968</span>         * <a name="line.968"></a>
<span class="sourceLineNo">969</span>         * @param obj<a name="line.969"></a>
<span class="sourceLineNo">970</span>         * @param slice<a name="line.970"></a>
<span class="sourceLineNo">971</span>         */<a name="line.971"></a>
<span class="sourceLineNo">972</span>        public Dataset setSlice(Object obj, SliceND slice);<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>        /**<a name="line.974"></a>
<span class="sourceLineNo">975</span>         * @param obj<a name="line.975"></a>
<span class="sourceLineNo">976</span>         *            specifies the object used to set the specified slice<a name="line.976"></a>
<span class="sourceLineNo">977</span>         * @param iterator<a name="line.977"></a>
<span class="sourceLineNo">978</span>         *            specifies the slice iterator<a name="line.978"></a>
<span class="sourceLineNo">979</span>         * <a name="line.979"></a>
<span class="sourceLineNo">980</span>         * @return The dataset with the sliced set to object<a name="line.980"></a>
<span class="sourceLineNo">981</span>         */<a name="line.981"></a>
<span class="sourceLineNo">982</span>        public Dataset setSlice(Object obj, IndexIterator iterator);<a name="line.982"></a>
<span class="sourceLineNo">983</span><a name="line.983"></a>
<span class="sourceLineNo">984</span>        /**<a name="line.984"></a>
<span class="sourceLineNo">985</span>         * Populate another dataset with part of current dataset<a name="line.985"></a>
<span class="sourceLineNo">986</span>         * <a name="line.986"></a>
<span class="sourceLineNo">987</span>         * @param other<a name="line.987"></a>
<span class="sourceLineNo">988</span>         * @param iter<a name="line.988"></a>
<span class="sourceLineNo">989</span>         *            over current dataset<a name="line.989"></a>
<span class="sourceLineNo">990</span>         */<a name="line.990"></a>
<span class="sourceLineNo">991</span>        public void fillDataset(Dataset other, IndexIterator iter);<a name="line.991"></a>
<span class="sourceLineNo">992</span><a name="line.992"></a>
<span class="sourceLineNo">993</span>        /**<a name="line.993"></a>
<span class="sourceLineNo">994</span>         * Test if all items are true<a name="line.994"></a>
<span class="sourceLineNo">995</span>         */<a name="line.995"></a>
<span class="sourceLineNo">996</span>        public boolean all();<a name="line.996"></a>
<span class="sourceLineNo">997</span><a name="line.997"></a>
<span class="sourceLineNo">998</span>        /**<a name="line.998"></a>
<span class="sourceLineNo">999</span>         * @param axis<a name="line.999"></a>
<span class="sourceLineNo">1000</span>         * @return dataset where items are true if all items along axis are true<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>         */<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>        public Dataset all(int axis);<a name="line.1002"></a>
<span class="sourceLineNo">1003</span><a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        /**<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>         * Test if any items are true<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>         */<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>        public boolean any();<a name="line.1007"></a>
<span class="sourceLineNo">1008</span><a name="line.1008"></a>
<span class="sourceLineNo">1009</span>        /**<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>         * @param axis<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>         * @return dataset where items are true if any items along axis are true<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>         */<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>        public Dataset any(int axis);<a name="line.1013"></a>
<span class="sourceLineNo">1014</span><a name="line.1014"></a>
<span class="sourceLineNo">1015</span>        /**<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>         * In-place addition with object o<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>         * <a name="line.1017"></a>
<span class="sourceLineNo">1018</span>         * @param o<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>         * @return sum dataset<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>         */<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>        public Dataset iadd(Object o);<a name="line.1021"></a>
<span class="sourceLineNo">1022</span><a name="line.1022"></a>
<span class="sourceLineNo">1023</span>        /**<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>         * In-place subtraction with object o<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>         * <a name="line.1025"></a>
<span class="sourceLineNo">1026</span>         * @param o<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>         * @return difference dataset<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>         */<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>        public Dataset isubtract(Object o);<a name="line.1029"></a>
<span class="sourceLineNo">1030</span><a name="line.1030"></a>
<span class="sourceLineNo">1031</span>        /**<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>         * In-place multiplication with object o<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>         * <a name="line.1033"></a>
<span class="sourceLineNo">1034</span>         * @param o<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>         * @return product dataset<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>         */<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>        public Dataset imultiply(Object o);<a name="line.1037"></a>
<span class="sourceLineNo">1038</span><a name="line.1038"></a>
<span class="sourceLineNo">1039</span>        /**<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>         * In-place division with object o<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>         * <a name="line.1041"></a>
<span class="sourceLineNo">1042</span>         * @param o<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>         * @return dividend dataset<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>         */<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>        public Dataset idivide(Object o);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span><a name="line.1046"></a>
<span class="sourceLineNo">1047</span>        /**<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>         * In-place floor division with object o<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>         * <a name="line.1049"></a>
<span class="sourceLineNo">1050</span>         * @param o<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>         * @return dividend dataset<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>         */<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>        public Dataset ifloorDivide(Object o);<a name="line.1053"></a>
<span class="sourceLineNo">1054</span><a name="line.1054"></a>
<span class="sourceLineNo">1055</span>        /**<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>         * In-place remainder<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>         * <a name="line.1057"></a>
<span class="sourceLineNo">1058</span>         * @return remaindered dataset<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>         */<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>        public Dataset iremainder(Object o);<a name="line.1060"></a>
<span class="sourceLineNo">1061</span><a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        /**<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>         * In-place floor<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>         * <a name="line.1064"></a>
<span class="sourceLineNo">1065</span>         * @return floored dataset<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>         */<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>        public Dataset ifloor();<a name="line.1067"></a>
<span class="sourceLineNo">1068</span><a name="line.1068"></a>
<span class="sourceLineNo">1069</span>        /**<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>         * In-place raise to power of object o<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>         * <a name="line.1071"></a>
<span class="sourceLineNo">1072</span>         * @param o<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>         * @return raised dataset<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>         */<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>        public Dataset ipower(Object o);<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>        /**<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>         * Calculate residual of dataset with object o<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>         * See {@link #residual(Object o, boolean ignoreNaNs)} with ignoreNaNs = false<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>         * <a name="line.1080"></a>
<span class="sourceLineNo">1081</span>         * @param o<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>         * @return sum of the squares of the differences<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>         */<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>        public double residual(Object o);<a name="line.1084"></a>
<span class="sourceLineNo">1085</span><a name="line.1085"></a>
<span class="sourceLineNo">1086</span>        /**<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>         * Calculate residual of dataset with object o<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>         * <a name="line.1088"></a>
<span class="sourceLineNo">1089</span>         * @param o<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>         * @param ignoreNaNs if true, skip NaNs<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>         * @return sum of the squares of the differences<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>         */<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>        public double residual(Object o, boolean ignoreNaNs);<a name="line.1093"></a>
<span class="sourceLineNo">1094</span><a name="line.1094"></a>
<span class="sourceLineNo">1095</span>        /**<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>         * Calculate residual of dataset with object o and weight. The weight is used to multiply<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>         * the squared differences<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>         * <a name="line.1098"></a>
<span class="sourceLineNo">1099</span>         * @param o<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>         * @param weight<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>         * @param ignoreNaNs if true, skip NaNs<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>         * @return sum of the squares of the differences<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>         */<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>        public double residual(Object o, Dataset weight, boolean ignoreNaNs);<a name="line.1104"></a>
<span class="sourceLineNo">1105</span><a name="line.1105"></a>
<span class="sourceLineNo">1106</span>        /**<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>         * @return true if dataset contains any infinities<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>         */<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>        public boolean containsInfs();<a name="line.1109"></a>
<span class="sourceLineNo">1110</span><a name="line.1110"></a>
<span class="sourceLineNo">1111</span>        /**<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>         * @return true if dataset contains any NaNs<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>         */<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        public boolean containsNans();<a name="line.1114"></a>
<span class="sourceLineNo">1115</span><a name="line.1115"></a>
<span class="sourceLineNo">1116</span>        /**<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>         * @return true if dataset contains any NaNs or infinities<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>         */<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>        public boolean containsInvalidNumbers();<a name="line.1119"></a>
<span class="sourceLineNo">1120</span><a name="line.1120"></a>
<span class="sourceLineNo">1121</span>        /**<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>         * @param axis<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>         * @param ignoreInvalids - Can be null, empty, or one or more booleans. By default, all booleans<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>         * are false. If the first boolean is true, will ignore NaNs and ignore infinities. Use the second<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>         * boolean to ignore infinities separately.<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>         * @return maxima along axis in dataset<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>         * @since 2.0<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>         */<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>        public Dataset max(int axis, boolean... ignoreInvalids);<a name="line.1129"></a>
<span class="sourceLineNo">1130</span><a name="line.1130"></a>
<span class="sourceLineNo">1131</span>        /**<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>         * @param axes<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>         * @return maxima in given axes of dataset<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>         * @since 2.2<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>         */<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>        public Dataset max(int[] axes, boolean... ignoreInvalids);<a name="line.1137"></a>
<span class="sourceLineNo">1138</span><a name="line.1138"></a>
<span class="sourceLineNo">1139</span>        /**<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>         * @param axis<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>         * @return minima along axis in dataset<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>         * @since 2.0<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>         */<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>        public Dataset min(int axis, boolean... ignoreInvalids);<a name="line.1145"></a>
<span class="sourceLineNo">1146</span><a name="line.1146"></a>
<span class="sourceLineNo">1147</span>        /**<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>         * @param axes<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>         * @return minima in given axes of dataset<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>         * @since 2.2<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>         */<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>        public Dataset min(int[] axes, boolean... ignoreInvalids);<a name="line.1153"></a>
<span class="sourceLineNo">1154</span><a name="line.1154"></a>
<span class="sourceLineNo">1155</span>        /**<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>         * Find absolute index of maximum value (in a flattened view)<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>         * @return absolute index<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>         * @since 2.0<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>         */<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>        public int argMax(boolean... ignoreInvalids);<a name="line.1161"></a>
<span class="sourceLineNo">1162</span><a name="line.1162"></a>
<span class="sourceLineNo">1163</span>        /**<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>         * Find indices of maximum values along given axis<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>         * @param axis<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>         * @return index dataset<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>         * @since 2.0<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>         */<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>        public Dataset argMax(int axis, boolean... ignoreInvalids);<a name="line.1170"></a>
<span class="sourceLineNo">1171</span><a name="line.1171"></a>
<span class="sourceLineNo">1172</span>        /**<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>         * Find absolute index of minimum value (in a flattened view)<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>         * @return absolute index<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>         * @since 2.0<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>         */<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        public int argMin(boolean... ignoreInvalids);<a name="line.1178"></a>
<span class="sourceLineNo">1179</span><a name="line.1179"></a>
<span class="sourceLineNo">1180</span>        /**<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>         * Find indices of minimum values along given axis<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>         * @param axis<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>         * @return index dataset<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>         * @since 2.0<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>         */<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>        public Dataset argMin(int axis, boolean... ignoreInvalids);<a name="line.1187"></a>
<span class="sourceLineNo">1188</span><a name="line.1188"></a>
<span class="sourceLineNo">1189</span>        /**<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>         * @return peak-to-peak value, the difference of maximum and minimum of dataset<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>         * @since 2.0<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>         */<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>        public Number peakToPeak(boolean... ignoreInvalids);<a name="line.1194"></a>
<span class="sourceLineNo">1195</span><a name="line.1195"></a>
<span class="sourceLineNo">1196</span>        /**<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>         * @param axis<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>         * @return peak-to-peak dataset, the difference of maxima and minima of dataset along axis<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>         * @since 2.0<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>         */<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>        public Dataset peakToPeak(int axis, boolean... ignoreInvalids);<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>        /**<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>         * @param axes<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>         * @return peak-to-peak dataset, the difference of maxima and minima of dataset in given axes<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>         * @since 2.2<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>         */<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        public Dataset peakToPeak(int[] axes, boolean... ignoreInvalids);<a name="line.1210"></a>
<span class="sourceLineNo">1211</span><a name="line.1211"></a>
<span class="sourceLineNo">1212</span>        /**<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>         * @return number of items in dataset<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>         * @since 2.0<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>         */<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>        public long count(boolean... ignoreInvalids);<a name="line.1217"></a>
<span class="sourceLineNo">1218</span><a name="line.1218"></a>
<span class="sourceLineNo">1219</span>        /**<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>         * @param axis<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>         * @return number of items along axis in dataset<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>         * @since 2.0<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>         */<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>        public Dataset count(int axis, boolean... ignoreInvalids);<a name="line.1225"></a>
<span class="sourceLineNo">1226</span><a name="line.1226"></a>
<span class="sourceLineNo">1227</span>        /**<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>         * @param axes<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>         * @return number of items in given axes of dataset<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>         * @since 2.2<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>         */<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>        public Dataset count(int[] axes, boolean... ignoreInvalids);<a name="line.1233"></a>
<span class="sourceLineNo">1234</span><a name="line.1234"></a>
<span class="sourceLineNo">1235</span>        /**<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>         * @return sum over all items in dataset as a Double, array of doubles or a complex number<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>         * @since 2.0<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>         */<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>        public Object sum(boolean... ignoreInvalids);<a name="line.1240"></a>
<span class="sourceLineNo">1241</span><a name="line.1241"></a>
<span class="sourceLineNo">1242</span>        /**<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>         * @param axis<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>         * @return sum along axis in dataset<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>         * @since 2.0<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>         */<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>        public Dataset sum(int axis, boolean... ignoreInvalids);<a name="line.1248"></a>
<span class="sourceLineNo">1249</span><a name="line.1249"></a>
<span class="sourceLineNo">1250</span>        /**<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>         * @param axes<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>         * @return sum  in given axes of dataset<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>         * @since 2.2<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>         */<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>        public Dataset sum(int[] axes, boolean... ignoreInvalids);<a name="line.1256"></a>
<span class="sourceLineNo">1257</span><a name="line.1257"></a>
<span class="sourceLineNo">1258</span>        /**<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>         * @return product over all items in dataset<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>         * @since 2.0<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>         */<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>        public Object product(boolean... ignoreInvalids);<a name="line.1263"></a>
<span class="sourceLineNo">1264</span><a name="line.1264"></a>
<span class="sourceLineNo">1265</span>        /**<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>         * @param axis<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>         * @return product along axis in dataset<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>         * @since 2.0<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>         */<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>        public Dataset product(int axis, boolean... ignoreInvalids);<a name="line.1271"></a>
<span class="sourceLineNo">1272</span><a name="line.1272"></a>
<span class="sourceLineNo">1273</span>        /**<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>         * @param axes<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>         * @return product in given axes of dataset<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>         * @since 2.2<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>         */<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>        public Dataset product(int[] axes, boolean... ignoreInvalids);<a name="line.1279"></a>
<span class="sourceLineNo">1280</span><a name="line.1280"></a>
<span class="sourceLineNo">1281</span>        /**<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>         * @param axis<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>         * @return mean along axis in dataset<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>         * @since 2.0<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>         */<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>        public Dataset mean(int axis, boolean... ignoreInvalids);<a name="line.1287"></a>
<span class="sourceLineNo">1288</span><a name="line.1288"></a>
<span class="sourceLineNo">1289</span>        /**<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>         * @param axes<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>         * @return mean in given axes of dataset<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>         * @since 2.2<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>         */<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>        public Dataset mean(int[] axes, boolean... ignoreInvalids);<a name="line.1295"></a>
<span class="sourceLineNo">1296</span><a name="line.1296"></a>
<span class="sourceLineNo">1297</span>        /**<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>         * @return sample variance of whole dataset<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>         * @see #variance(boolean, boolean...) with isWholePopulation = false<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>         * @since 2.0<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>         */<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>        public double variance();<a name="line.1302"></a>
<span class="sourceLineNo">1303</span><a name="line.1303"></a>
<span class="sourceLineNo">1304</span>        /**<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>         * The sample variance can be calculated in two ways: if the dataset is considered as the<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>         * entire population then the sample variance is simply the second central moment:<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>         * <a name="line.1307"></a>
<span class="sourceLineNo">1308</span>         * &lt;pre&gt;<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>         *    sum((x_i - m)^2)/N<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>         * where {x_i} are set of N population values and m is the mean<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>         *    m = sum(x_i)/N<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>         * &lt;/pre&gt;<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>         * <a name="line.1313"></a>
<span class="sourceLineNo">1314</span>         * Otherwise, if the dataset is a set of samples (with replacement) from the population then<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>         * <a name="line.1315"></a>
<span class="sourceLineNo">1316</span>         * &lt;pre&gt;<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>         *    sum((x_i - m)^2)/(N-1)<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>         * where {x_i} are set of N sample values and m is the unbiased estimate of the mean<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>         *    m = sum(x_i)/N<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>         * &lt;/pre&gt;<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>         * <a name="line.1321"></a>
<span class="sourceLineNo">1322</span>         * Note that the second definition is also the unbiased estimator of population variance.<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>         * <a name="line.1323"></a>
<span class="sourceLineNo">1324</span>         * @param isWholePopulation<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>         * @return sample variance<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>         * @since 2.0<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>         */<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>        public double variance(boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1329"></a>
<span class="sourceLineNo">1330</span><a name="line.1330"></a>
<span class="sourceLineNo">1331</span>        /**<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>         * @param axis<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>         * @return sample variance along axis in dataset<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>         * @see #variance(int, boolean, boolean...) with isWholePopulation = false<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>         */<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>        public Dataset variance(int axis);<a name="line.1336"></a>
<span class="sourceLineNo">1337</span><a name="line.1337"></a>
<span class="sourceLineNo">1338</span>        /**<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>         * @param axes<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>         * @return sample variance in given axes of dataset<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>         * @see #variance(int[], boolean, boolean...) with isWholePopulation = false<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>         * @since 2.2<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>         */<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        public Dataset variance(int[] axes);<a name="line.1344"></a>
<span class="sourceLineNo">1345</span><a name="line.1345"></a>
<span class="sourceLineNo">1346</span>        /**<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>         * @param axis<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>         * @param isWholePopulation<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>         * @return sample variance along axis in dataset<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>         * @since 2.0<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>         */<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        public Dataset variance(int axis, boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1353"></a>
<span class="sourceLineNo">1354</span><a name="line.1354"></a>
<span class="sourceLineNo">1355</span>        /**<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>         * @param axes<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>         * @param isWholePopulation<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>         * @return sample variance in given axes of dataset<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>         * @since 2.2<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>         */<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        public Dataset variance(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1362"></a>
<span class="sourceLineNo">1363</span><a name="line.1363"></a>
<span class="sourceLineNo">1364</span>        /**<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>         * Standard deviation is square root of the variance<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>         * <a name="line.1366"></a>
<span class="sourceLineNo">1367</span>         * @return sample standard deviation of all items in dataset<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>         * @see #stdDeviation(boolean, boolean...) with isWholePopulation = false<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>         * @since 2.0<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>         */<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>        public double stdDeviation();<a name="line.1371"></a>
<span class="sourceLineNo">1372</span><a name="line.1372"></a>
<span class="sourceLineNo">1373</span>        /**<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>         * Standard deviation is square root of the variance<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>         * <a name="line.1375"></a>
<span class="sourceLineNo">1376</span>         * @param isWholePopulation<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>         * @return sample standard deviation of all items in dataset<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>         * @see #variance(boolean, boolean...)<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>         * @since 2.0<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>         */<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>        public double stdDeviation(boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1382"></a>
<span class="sourceLineNo">1383</span><a name="line.1383"></a>
<span class="sourceLineNo">1384</span>        /**<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>         * Standard deviation is square root of the variance<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>         * <a name="line.1386"></a>
<span class="sourceLineNo">1387</span>         * @param axis<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>         * @return standard deviation along axis in dataset<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>         * @see #stdDeviation(int, boolean, boolean...) with isWholePopulation = false<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>         */<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>        public Dataset stdDeviation(int axis);<a name="line.1391"></a>
<span class="sourceLineNo">1392</span><a name="line.1392"></a>
<span class="sourceLineNo">1393</span>        /**<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>         * Standard deviation is square root of the variance<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>         * <a name="line.1395"></a>
<span class="sourceLineNo">1396</span>         * @param axes<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>         * @return standard deviation in given axes of dataset<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>         * @see #stdDeviation(int[], boolean, boolean...) with isWholePopulation = false<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>         * @since 2.2<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>         */<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>        public Dataset stdDeviation(int[] axes);<a name="line.1401"></a>
<span class="sourceLineNo">1402</span><a name="line.1402"></a>
<span class="sourceLineNo">1403</span>        /**<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>         * Standard deviation is square root of the variance<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>         * <a name="line.1405"></a>
<span class="sourceLineNo">1406</span>         * @param axis<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>         * @param isWholePopulation<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>         * @return standard deviation along axis in dataset<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>         * @since 2.0<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>         */<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>        public Dataset stdDeviation(int axis, boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1412"></a>
<span class="sourceLineNo">1413</span><a name="line.1413"></a>
<span class="sourceLineNo">1414</span>        /**<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>         * Standard deviation is square root of the variance<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>         * <a name="line.1416"></a>
<span class="sourceLineNo">1417</span>         * @param axes<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>         * @param isWholePopulation<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>         * @return standard deviation in given axes of dataset<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>         * @since 2.2<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>         */<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>        public Dataset stdDeviation(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids);<a name="line.1423"></a>
<span class="sourceLineNo">1424</span><a name="line.1424"></a>
<span class="sourceLineNo">1425</span>        /**<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>         * @param ignoreInvalids - see {@link IDataset#max(boolean...)}<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>         * @return root mean square<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>         * @since 2.0<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>         */<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        public double rootMeanSquare(boolean... ignoreInvalids);<a name="line.1430"></a>
<span class="sourceLineNo">1431</span><a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        /**<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>         * @param axis<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>         * @return root mean square along axis in dataset<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>         * @since 2.0<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>         */<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>        public Dataset rootMeanSquare(int axis, boolean... ignoreInvalids);<a name="line.1438"></a>
<span class="sourceLineNo">1439</span><a name="line.1439"></a>
<span class="sourceLineNo">1440</span>        /**<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>         * @param axes<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>         * @param ignoreInvalids - see {@link #max(int, boolean...)}<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>         * @return root mean square in given axes of dataset<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>         * @since 2.2<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>         */<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        public Dataset rootMeanSquare(int[] axes, boolean... ignoreInvalids);<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>}<a name="line.1447"></a>




























































</pre>
</div>
</body>
</html>
