<!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>import java.lang.reflect.Array;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.text.Format;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.util.Arrays;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.List;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.eclipse.january.DatasetException;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.eclipse.january.IMonitor;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.eclipse.january.MetadataException;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.eclipse.january.metadata.ErrorMetadata;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.eclipse.january.metadata.MetadataFactory;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.eclipse.january.metadata.StatisticsMetadata;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.eclipse.january.metadata.internal.ErrorMetadataImpl;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.eclipse.january.metadata.internal.StatisticsMetadataImpl;<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
<span class="sourceLineNo">031</span> * Generic container class for data <a name="line.31"></a>
<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
<span class="sourceLineNo">033</span> * Each subclass has an array of primitive types, elements of this array are grouped or<a name="line.33"></a>
<span class="sourceLineNo">034</span> * compounded to make items <a name="line.34"></a>
<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
<span class="sourceLineNo">036</span> * Data items can be boolean, integer, float, complex float, vector float, etc<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>public abstract class AbstractDataset extends LazyDatasetBase implements Dataset {<a name="line.38"></a>
<span class="sourceLineNo">039</span>        // pin UID to base class<a name="line.39"></a>
<span class="sourceLineNo">040</span>        private static final long serialVersionUID = Dataset.serialVersionUID;<a name="line.40"></a>
<span class="sourceLineNo">041</span><a name="line.41"></a>
<span class="sourceLineNo">042</span>        protected int size; // number of items<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>        transient protected AbstractDataset base; // is null when not a view<a name="line.44"></a>
<span class="sourceLineNo">045</span>        protected int[] stride; // can be null for row-major, contiguous datasets<a name="line.45"></a>
<span class="sourceLineNo">046</span>        protected int offset;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>        /**<a name="line.48"></a>
<span class="sourceLineNo">049</span>         * The data itself, held in a 1D array, but the object will wrap it to appear as possessing as many dimensions as<a name="line.49"></a>
<span class="sourceLineNo">050</span>         * wanted<a name="line.50"></a>
<span class="sourceLineNo">051</span>         */<a name="line.51"></a>
<span class="sourceLineNo">052</span>        protected Serializable odata = null;<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>        /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>         * Set aliased data as base data<a name="line.55"></a>
<span class="sourceLineNo">056</span>         */<a name="line.56"></a>
<span class="sourceLineNo">057</span>        abstract protected void setData();<a name="line.57"></a>
<span class="sourceLineNo">058</span><a name="line.58"></a>
<span class="sourceLineNo">059</span>        /**<a name="line.59"></a>
<span class="sourceLineNo">060</span>         * Constructor required for serialisation.<a name="line.60"></a>
<span class="sourceLineNo">061</span>         */<a name="line.61"></a>
<span class="sourceLineNo">062</span>        public AbstractDataset() {<a name="line.62"></a>
<span class="sourceLineNo">063</span>        }<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>        @Override<a name="line.65"></a>
<span class="sourceLineNo">066</span>        public synchronized Dataset synchronizedCopy() {<a name="line.66"></a>
<span class="sourceLineNo">067</span>                return clone();<a name="line.67"></a>
<span class="sourceLineNo">068</span>        }<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>        @Override<a name="line.70"></a>
<span class="sourceLineNo">071</span>        public int hashCode() {<a name="line.71"></a>
<span class="sourceLineNo">072</span>                return getStats().getHash(shape);<a name="line.72"></a>
<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>        @Override<a name="line.75"></a>
<span class="sourceLineNo">076</span>        abstract public AbstractDataset clone();<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>        protected Format stringFormat = null;<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>        @Override<a name="line.80"></a>
<span class="sourceLineNo">081</span>        public void setStringFormat(Format format) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>                stringFormat = format;<a name="line.82"></a>
<span class="sourceLineNo">083</span>        }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>        @Override<a name="line.85"></a>
<span class="sourceLineNo">086</span>        public Dataset copy(final int dtype) {<a name="line.86"></a>
<span class="sourceLineNo">087</span>                return copy(DTypeUtils.getInterface(dtype));<a name="line.87"></a>
<span class="sourceLineNo">088</span>        }<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>        @Override<a name="line.90"></a>
<span class="sourceLineNo">091</span>        public &lt;T extends Dataset&gt; T copy(Class&lt;T&gt; clazz) {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                return DatasetUtils.copy(clazz, this);<a name="line.92"></a>
<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>        @Override<a name="line.95"></a>
<span class="sourceLineNo">096</span>        public Dataset cast(final int dtype) {<a name="line.96"></a>
<span class="sourceLineNo">097</span>                return cast(DTypeUtils.getInterface(dtype));<a name="line.97"></a>
<span class="sourceLineNo">098</span>        }<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>        @SuppressWarnings("unchecked")<a name="line.100"></a>
<span class="sourceLineNo">101</span>        @Override<a name="line.101"></a>
<span class="sourceLineNo">102</span>        public &lt;T extends Dataset&gt; T cast(Class&lt;T&gt; clazz) {<a name="line.102"></a>
<span class="sourceLineNo">103</span>                if (getClass().equals(clazz)) {<a name="line.103"></a>
<span class="sourceLineNo">104</span>                        return (T) this;<a name="line.104"></a>
<span class="sourceLineNo">105</span>                }<a name="line.105"></a>
<span class="sourceLineNo">106</span>                return DatasetUtils.cast(clazz, this);<a name="line.106"></a>
<span class="sourceLineNo">107</span>        }<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>        /**<a name="line.109"></a>
<span class="sourceLineNo">110</span>         * {@inheritDoc Dataset#cast(int, Class, boolean)}<a name="line.110"></a>
<span class="sourceLineNo">111</span>         * @since 2.3<a name="line.111"></a>
<span class="sourceLineNo">112</span>         */<a name="line.112"></a>
<span class="sourceLineNo">113</span>        @SuppressWarnings("unchecked")<a name="line.113"></a>
<span class="sourceLineNo">114</span>        @Override<a name="line.114"></a>
<span class="sourceLineNo">115</span>        public &lt;T extends Dataset&gt; T cast(final int isize, Class&lt;T&gt; clazz, final boolean repeat) {<a name="line.115"></a>
<span class="sourceLineNo">116</span>                if (getClass().equals(clazz) &amp;&amp; getElementsPerItem() == isize) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>                        return (T) this;<a name="line.117"></a>
<span class="sourceLineNo">118</span>                }<a name="line.118"></a>
<span class="sourceLineNo">119</span>                return DatasetUtils.cast(isize, clazz, this, repeat);<a name="line.119"></a>
<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>        @Override<a name="line.122"></a>
<span class="sourceLineNo">123</span>        public Dataset cast(final boolean repeat, final int dtype, final int isize) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                return cast(isize, DTypeUtils.getInterface(dtype), repeat);<a name="line.124"></a>
<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>        @Override<a name="line.127"></a>
<span class="sourceLineNo">128</span>        abstract public AbstractDataset getView(boolean deepCopyMetadata);<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>         * Copy fields from original to view<a name="line.131"></a>
<span class="sourceLineNo">132</span>         * @param orig<a name="line.132"></a>
<span class="sourceLineNo">133</span>         * @param view<a name="line.133"></a>
<span class="sourceLineNo">134</span>         * @param clone if true, then clone everything but bulk data<a name="line.134"></a>
<span class="sourceLineNo">135</span>         * @param cloneMetadata if true, clone metadata<a name="line.135"></a>
<span class="sourceLineNo">136</span>         */<a name="line.136"></a>
<span class="sourceLineNo">137</span>        protected static void copyToView(Dataset orig, AbstractDataset view, boolean clone, boolean cloneMetadata) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                view.name = orig.getName();<a name="line.138"></a>
<span class="sourceLineNo">139</span>                view.size = orig.getSize();<a name="line.139"></a>
<span class="sourceLineNo">140</span>                view.odata = orig.getBuffer();<a name="line.140"></a>
<span class="sourceLineNo">141</span>                view.offset = orig.getOffset();<a name="line.141"></a>
<span class="sourceLineNo">142</span>                view.base = orig instanceof AbstractDataset ? ((AbstractDataset) orig).base : null;<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>                if (clone) {<a name="line.144"></a>
<span class="sourceLineNo">145</span>                        view.shape = orig.getShapeRef() == null ? null : orig.getShape();<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        view.stride = orig instanceof AbstractDataset &amp;&amp; ((AbstractDataset) orig).stride != null ?<a name="line.146"></a>
<span class="sourceLineNo">147</span>                                        ((AbstractDataset) orig).stride.clone() : null;<a name="line.147"></a>
<span class="sourceLineNo">148</span>                } else {<a name="line.148"></a>
<span class="sourceLineNo">149</span>                        view.shape = orig.getShapeRef();<a name="line.149"></a>
<span class="sourceLineNo">150</span>                        view.stride = orig instanceof AbstractDataset ? ((AbstractDataset) orig).stride : null;<a name="line.150"></a>
<span class="sourceLineNo">151</span>                }<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>                view.metadata = getMetadataMap(orig, cloneMetadata);<a name="line.153"></a>
<span class="sourceLineNo">154</span>                int odtype = orig.getDType();<a name="line.154"></a>
<span class="sourceLineNo">155</span>                int vdtype = view.getDType();<a name="line.155"></a>
<span class="sourceLineNo">156</span>                if (odtype != vdtype) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>                        view.setDirty();<a name="line.157"></a>
<span class="sourceLineNo">158</span>                }<a name="line.158"></a>
<span class="sourceLineNo">159</span>        }<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>        @Override<a name="line.161"></a>
<span class="sourceLineNo">162</span>        public IntegerDataset getIndices() {<a name="line.162"></a>
<span class="sourceLineNo">163</span>                final IntegerDataset ret = DatasetUtils.indices(shape);<a name="line.163"></a>
<span class="sourceLineNo">164</span>                if (getName() != null) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>                        ret.setName("Indices of " + getName());<a name="line.165"></a>
<span class="sourceLineNo">166</span>                }<a name="line.166"></a>
<span class="sourceLineNo">167</span>                return ret;<a name="line.167"></a>
<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
<span class="sourceLineNo">169</span><a name="line.169"></a>
<span class="sourceLineNo">170</span>        @Override<a name="line.170"></a>
<span class="sourceLineNo">171</span>        public Dataset getTransposedView(int... axes) {<a name="line.171"></a>
<span class="sourceLineNo">172</span>                axes = checkPermutatedAxes(shape, axes);<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span>                AbstractDataset t = getView(true);<a name="line.174"></a>
<span class="sourceLineNo">175</span>                if (axes == null || getRank() == 1)<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        return t;<a name="line.176"></a>
<span class="sourceLineNo">177</span><a name="line.177"></a>
<span class="sourceLineNo">178</span>                int rank = shape.length;<a name="line.178"></a>
<span class="sourceLineNo">179</span>                int[] tstride = new int[rank];<a name="line.179"></a>
<span class="sourceLineNo">180</span>                int[] toffset = new int[1];<a name="line.180"></a>
<span class="sourceLineNo">181</span>                int[] nshape = createStrides(new SliceND(shape), this, tstride, toffset);<a name="line.181"></a>
<span class="sourceLineNo">182</span>                int[] nstride = new int[rank];<a name="line.182"></a>
<span class="sourceLineNo">183</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>                        final int ax = axes[i];<a name="line.184"></a>
<span class="sourceLineNo">185</span>                        nstride[i] = tstride[ax];<a name="line.185"></a>
<span class="sourceLineNo">186</span>                        nshape[i] = shape[ax];<a name="line.186"></a>
<span class="sourceLineNo">187</span>                }<a name="line.187"></a>
<span class="sourceLineNo">188</span>                t.shape = nshape;<a name="line.188"></a>
<span class="sourceLineNo">189</span>                t.stride = nstride;<a name="line.189"></a>
<span class="sourceLineNo">190</span>                t.offset = toffset[0];<a name="line.190"></a>
<span class="sourceLineNo">191</span>                t.base = this;<a name="line.191"></a>
<span class="sourceLineNo">192</span>                t.setDirty();<a name="line.192"></a>
<span class="sourceLineNo">193</span>                t.transposeMetadata(axes);<a name="line.193"></a>
<span class="sourceLineNo">194</span>                return t;<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>        @Override<a name="line.197"></a>
<span class="sourceLineNo">198</span>        public Dataset transpose(int... axes) {<a name="line.198"></a>
<span class="sourceLineNo">199</span>                Dataset t = getTransposedView(axes);<a name="line.199"></a>
<span class="sourceLineNo">200</span>                return t == null ? clone() : t.clone();<a name="line.200"></a>
<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>        @Override<a name="line.203"></a>
<span class="sourceLineNo">204</span>        public Dataset swapAxes(int axis1, int axis2) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                int rank = shape.length;<a name="line.205"></a>
<span class="sourceLineNo">206</span>                axis1 = ShapeUtils.checkAxis(rank, axis1);<a name="line.206"></a>
<span class="sourceLineNo">207</span>                axis2 = ShapeUtils.checkAxis(rank, axis2);<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>                if (rank == 1 || axis1 == axis2) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                        return this;<a name="line.210"></a>
<span class="sourceLineNo">211</span>                }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>                int[] axes = new int[rank];<a name="line.213"></a>
<span class="sourceLineNo">214</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>                        axes[i] = i;<a name="line.215"></a>
<span class="sourceLineNo">216</span>                }               <a name="line.216"></a>
<span class="sourceLineNo">217</span><a name="line.217"></a>
<span class="sourceLineNo">218</span>                axes[axis1] = axis2;<a name="line.218"></a>
<span class="sourceLineNo">219</span>                axes[axis2] = axis1;<a name="line.219"></a>
<span class="sourceLineNo">220</span>                return getTransposedView(axes);<a name="line.220"></a>
<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>        boolean isContiguous() {<a name="line.223"></a>
<span class="sourceLineNo">224</span>                if (stride == null)<a name="line.224"></a>
<span class="sourceLineNo">225</span>                        return true;<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>                if (offset != 0)<a name="line.227"></a>
<span class="sourceLineNo">228</span>                        return false;<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>                int s = getElementsPerItem();<a name="line.230"></a>
<span class="sourceLineNo">231</span>                for (int j = getRank() - 1; j &gt;= 0; j--) {<a name="line.231"></a>
<span class="sourceLineNo">232</span>                        if (stride[j] != s) {<a name="line.232"></a>
<span class="sourceLineNo">233</span>                                return false;<a name="line.233"></a>
<span class="sourceLineNo">234</span>                        }<a name="line.234"></a>
<span class="sourceLineNo">235</span>                        s *= shape[j];<a name="line.235"></a>
<span class="sourceLineNo">236</span>                }<a name="line.236"></a>
<span class="sourceLineNo">237</span><a name="line.237"></a>
<span class="sourceLineNo">238</span>                return true;<a name="line.238"></a>
<span class="sourceLineNo">239</span>        }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>        @Override<a name="line.241"></a>
<span class="sourceLineNo">242</span>        public Dataset flatten() {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                if (!isContiguous()) { // need to make a copy if not contiguous<a name="line.243"></a>
<span class="sourceLineNo">244</span>                        return clone().flatten();<a name="line.244"></a>
<span class="sourceLineNo">245</span>                }<a name="line.245"></a>
<span class="sourceLineNo">246</span>                return reshape(size);<a name="line.246"></a>
<span class="sourceLineNo">247</span>        }<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>         * Fill dataset from object at depth dimension<a name="line.250"></a>
<span class="sourceLineNo">251</span>         * @param obj<a name="line.251"></a>
<span class="sourceLineNo">252</span>         * @param depth<a name="line.252"></a>
<span class="sourceLineNo">253</span>         * @param pos position<a name="line.253"></a>
<span class="sourceLineNo">254</span>         */<a name="line.254"></a>
<span class="sourceLineNo">255</span>        protected void fillData(Object obj, final int depth, final int[] pos) {<a name="line.255"></a>
<span class="sourceLineNo">256</span>                if (obj == null) {<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        Class&lt;?&gt; c = InterfaceUtils.getElementClass(getClass());<a name="line.257"></a>
<span class="sourceLineNo">258</span>                        if (Float.class.equals(c)) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>                                set(Float.NaN, pos);<a name="line.259"></a>
<span class="sourceLineNo">260</span>                        } else if (Float.class.equals(c)) {<a name="line.260"></a>
<span class="sourceLineNo">261</span>                                set(Double.NaN, pos);<a name="line.261"></a>
<span class="sourceLineNo">262</span>                        }<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        return;<a name="line.263"></a>
<span class="sourceLineNo">264</span>                }<a name="line.264"></a>
<span class="sourceLineNo">265</span><a name="line.265"></a>
<span class="sourceLineNo">266</span>                Class&lt;?&gt; clazz = obj.getClass();<a name="line.266"></a>
<span class="sourceLineNo">267</span>                if (obj instanceof List&lt;?&gt;) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) obj;<a name="line.268"></a>
<span class="sourceLineNo">269</span>                        int l = jl.size();<a name="line.269"></a>
<span class="sourceLineNo">270</span>                        for (int i = 0; i &lt; l; i++) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>                                Object lo = jl.get(i);<a name="line.271"></a>
<span class="sourceLineNo">272</span>                                fillData(lo, depth + 1, pos);<a name="line.272"></a>
<span class="sourceLineNo">273</span>                                pos[depth]++;<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        }<a name="line.274"></a>
<span class="sourceLineNo">275</span>                        pos[depth] = 0;<a name="line.275"></a>
<span class="sourceLineNo">276</span>                } else if (clazz.isArray()) {<a name="line.276"></a>
<span class="sourceLineNo">277</span>                        int l = Array.getLength(obj);<a name="line.277"></a>
<span class="sourceLineNo">278</span>                        if (clazz.equals(odata.getClass())) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>                                System.arraycopy(obj, 0, odata, get1DIndex(pos), l);<a name="line.279"></a>
<span class="sourceLineNo">280</span>                        } else if (clazz.getComponentType().isPrimitive()) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                                for (int i = 0; i &lt; l; i++) {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                                        set(Array.get(obj, i), pos);<a name="line.282"></a>
<span class="sourceLineNo">283</span>                                        pos[depth]++;<a name="line.283"></a>
<span class="sourceLineNo">284</span>                                }<a name="line.284"></a>
<span class="sourceLineNo">285</span>                                pos[depth] = 0;<a name="line.285"></a>
<span class="sourceLineNo">286</span>                        } else {<a name="line.286"></a>
<span class="sourceLineNo">287</span>                                for (int i = 0; i &lt; l; i++) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>                                        fillData(Array.get(obj, i), depth + 1, pos);<a name="line.288"></a>
<span class="sourceLineNo">289</span>                                        pos[depth]++;<a name="line.289"></a>
<span class="sourceLineNo">290</span>                                }<a name="line.290"></a>
<span class="sourceLineNo">291</span>                                pos[depth] = 0;<a name="line.291"></a>
<span class="sourceLineNo">292</span>                        }<a name="line.292"></a>
<span class="sourceLineNo">293</span>                } else if (obj instanceof IDataset) {<a name="line.293"></a>
<span class="sourceLineNo">294</span>                        boolean[] a = new boolean[shape.length];<a name="line.294"></a>
<span class="sourceLineNo">295</span>                        Arrays.fill(a, depth, a.length, true);<a name="line.295"></a>
<span class="sourceLineNo">296</span>                        setSlice(obj, getSliceIteratorFromAxes(pos, a));<a name="line.296"></a>
<span class="sourceLineNo">297</span>                } else {<a name="line.297"></a>
<span class="sourceLineNo">298</span>                        set(obj, pos);<a name="line.298"></a>
<span class="sourceLineNo">299</span>                }<a name="line.299"></a>
<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>        @Override<a name="line.302"></a>
<span class="sourceLineNo">303</span>        public IndexIterator getIterator(final boolean withPosition) {<a name="line.303"></a>
<span class="sourceLineNo">304</span>                if (stride != null) {<a name="line.304"></a>
<span class="sourceLineNo">305</span>                        return base.getSize() == 1  ? (withPosition ? new PositionIterator(offset, shape) :<a name="line.305"></a>
<span class="sourceLineNo">306</span>                                new SingleItemIterator(offset, size)) : new StrideIterator(shape, stride, offset);<a name="line.306"></a>
<span class="sourceLineNo">307</span>                }<a name="line.307"></a>
<span class="sourceLineNo">308</span>                if (shape == null) {<a name="line.308"></a>
<span class="sourceLineNo">309</span>                        return new NullIterator(shape, shape);<a name="line.309"></a>
<span class="sourceLineNo">310</span>                }<a name="line.310"></a>
<span class="sourceLineNo">311</span>                <a name="line.311"></a>
<span class="sourceLineNo">312</span>                return withPosition ? new ContiguousIteratorWithPosition(shape, size) : new ContiguousIterator(size);<a name="line.312"></a>
<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>        @Override<a name="line.315"></a>
<span class="sourceLineNo">316</span>        public IndexIterator getIterator() {<a name="line.316"></a>
<span class="sourceLineNo">317</span>                return getIterator(false);<a name="line.317"></a>
<span class="sourceLineNo">318</span>        }<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 PositionIterator getPositionIterator(final int... axes) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                return new PositionIterator(shape, axes);<a name="line.322"></a>
<span class="sourceLineNo">323</span>        }<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>        @Override<a name="line.325"></a>
<span class="sourceLineNo">326</span>        public IndexIterator getSliceIterator(final int[] start, final int[] stop, final int[] step) {<a name="line.326"></a>
<span class="sourceLineNo">327</span>                return getSliceIterator(new SliceND(shape, start, stop, step));<a name="line.327"></a>
<span class="sourceLineNo">328</span>        }<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>         * @param slice<a name="line.331"></a>
<span class="sourceLineNo">332</span>         * @return an slice iterator that operates like an IndexIterator<a name="line.332"></a>
<span class="sourceLineNo">333</span>         */<a name="line.333"></a>
<span class="sourceLineNo">334</span>        public IndexIterator getSliceIterator(SliceND slice) {<a name="line.334"></a>
<span class="sourceLineNo">335</span>                if (ShapeUtils.calcLongSize(slice.getShape()) == 0) {<a name="line.335"></a>
<span class="sourceLineNo">336</span>                        return new NullIterator(shape, slice.getShape());<a name="line.336"></a>
<span class="sourceLineNo">337</span>                }<a name="line.337"></a>
<span class="sourceLineNo">338</span>                if (stride != null) {<a name="line.338"></a>
<span class="sourceLineNo">339</span>                        return new StrideIterator(getElementsPerItem(), shape, stride, offset, slice);<a name="line.339"></a>
<span class="sourceLineNo">340</span>                }<a name="line.340"></a>
<span class="sourceLineNo">341</span>                return new SliceIterator(shape, size, slice);<a name="line.341"></a>
<span class="sourceLineNo">342</span>        }<a name="line.342"></a>
<span class="sourceLineNo">343</span><a name="line.343"></a>
<span class="sourceLineNo">344</span>        @Override<a name="line.344"></a>
<span class="sourceLineNo">345</span>        public SliceIterator getSliceIteratorFromAxes(final int[] pos, boolean[] axes) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                int rank = shape.length;<a name="line.346"></a>
<span class="sourceLineNo">347</span>                int[] start;<a name="line.347"></a>
<span class="sourceLineNo">348</span>                int[] stop = new int[rank];<a name="line.348"></a>
<span class="sourceLineNo">349</span>                int[] step = new int[rank];<a name="line.349"></a>
<span class="sourceLineNo">350</span><a name="line.350"></a>
<span class="sourceLineNo">351</span>                if (pos == null) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>                        start = new int[rank];<a name="line.352"></a>
<span class="sourceLineNo">353</span>                } else if (pos.length == rank) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                        start = pos.clone();<a name="line.354"></a>
<span class="sourceLineNo">355</span>                } else {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                        throw new IllegalArgumentException("pos array length is not equal to rank of dataset");<a name="line.356"></a>
<span class="sourceLineNo">357</span>                }<a name="line.357"></a>
<span class="sourceLineNo">358</span>                if (axes == null) {<a name="line.358"></a>
<span class="sourceLineNo">359</span>                        axes = new boolean[rank];<a name="line.359"></a>
<span class="sourceLineNo">360</span>                        Arrays.fill(axes, true);<a name="line.360"></a>
<span class="sourceLineNo">361</span>                } else if (axes.length != rank) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                        throw new IllegalArgumentException("axes array length is not equal to rank of dataset");<a name="line.362"></a>
<span class="sourceLineNo">363</span>                }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.365"></a>
<span class="sourceLineNo">366</span>                        if (axes[i]) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                                stop[i] = shape[i];<a name="line.367"></a>
<span class="sourceLineNo">368</span>                        } else {<a name="line.368"></a>
<span class="sourceLineNo">369</span>                                stop[i] = start[i] + 1;<a name="line.369"></a>
<span class="sourceLineNo">370</span>                        }<a name="line.370"></a>
<span class="sourceLineNo">371</span>                        step[i] = 1;<a name="line.371"></a>
<span class="sourceLineNo">372</span>                }<a name="line.372"></a>
<span class="sourceLineNo">373</span>                return (SliceIterator) getSliceIterator(start, stop, step);<a name="line.373"></a>
<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>        @Override<a name="line.376"></a>
<span class="sourceLineNo">377</span>        public BooleanIterator getBooleanIterator(Dataset choice) {<a name="line.377"></a>
<span class="sourceLineNo">378</span>                return getBooleanIterator(choice, true);<a name="line.378"></a>
<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>        @Override<a name="line.381"></a>
<span class="sourceLineNo">382</span>        public BooleanIterator getBooleanIterator(Dataset choice, boolean value) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>                return BooleanIterator.createIterator(value, this, choice, this);<a name="line.383"></a>
<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
<span class="sourceLineNo">385</span><a name="line.385"></a>
<span class="sourceLineNo">386</span>        @Override<a name="line.386"></a>
<span class="sourceLineNo">387</span>        public Dataset getByBoolean(Dataset selection) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>                checkCompatibility(selection);<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>                final int length = ((Number) selection.sum()).intValue();<a name="line.390"></a>
<span class="sourceLineNo">391</span>                final int is = getElementsPerItem();<a name="line.391"></a>
<span class="sourceLineNo">392</span>                Dataset r = DatasetFactory.zeros(is, getClass(), length);<a name="line.392"></a>
<span class="sourceLineNo">393</span>                BooleanIterator biter = getBooleanIterator(selection);<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
<span class="sourceLineNo">395</span>                int i = 0;<a name="line.395"></a>
<span class="sourceLineNo">396</span>                while (biter.hasNext()) {<a name="line.396"></a>
<span class="sourceLineNo">397</span>                        r.setObjectAbs(i, getObjectAbs(biter.index));<a name="line.397"></a>
<span class="sourceLineNo">398</span>                        i += is;<a name="line.398"></a>
<span class="sourceLineNo">399</span>                }<a name="line.399"></a>
<span class="sourceLineNo">400</span>                return r;<a name="line.400"></a>
<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>        @Override<a name="line.403"></a>
<span class="sourceLineNo">404</span>        public Dataset getBy1DIndex(IntegerDataset index) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>                final int is = getElementsPerItem();<a name="line.405"></a>
<span class="sourceLineNo">406</span>                final Dataset r = DatasetFactory.zeros(is, getClass(), index.getShapeRef());<a name="line.406"></a>
<span class="sourceLineNo">407</span>                final IntegerIterator iter = new IntegerIterator(index, size, is);<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>                int i = 0;<a name="line.409"></a>
<span class="sourceLineNo">410</span>                while (iter.hasNext()) {<a name="line.410"></a>
<span class="sourceLineNo">411</span>                        r.setObjectAbs(i, getObjectAbs(iter.index));<a name="line.411"></a>
<span class="sourceLineNo">412</span>                        i += is;<a name="line.412"></a>
<span class="sourceLineNo">413</span>                }<a name="line.413"></a>
<span class="sourceLineNo">414</span>                return r;<a name="line.414"></a>
<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
<span class="sourceLineNo">418</span>        public Dataset getByIndexes(final Object... indexes) {<a name="line.418"></a>
<span class="sourceLineNo">419</span>                final IntegersIterator iter = new IntegersIterator(shape, indexes);<a name="line.419"></a>
<span class="sourceLineNo">420</span>                final int is = getElementsPerItem();<a name="line.420"></a>
<span class="sourceLineNo">421</span>                final Dataset r = DatasetFactory.zeros(is, getClass(), iter.getShape());<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>                final int[] pos = iter.getPos();<a name="line.423"></a>
<span class="sourceLineNo">424</span>                int i = 0;<a name="line.424"></a>
<span class="sourceLineNo">425</span>                while (iter.hasNext()) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>                        r.setObjectAbs(i, getObject(pos));<a name="line.426"></a>
<span class="sourceLineNo">427</span>                        i += is;<a name="line.427"></a>
<span class="sourceLineNo">428</span>                }<a name="line.428"></a>
<span class="sourceLineNo">429</span>                return r;<a name="line.429"></a>
<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
<span class="sourceLineNo">433</span>        public boolean hasFloatingPointElements() {<a name="line.433"></a>
<span class="sourceLineNo">434</span>                Class&lt;?&gt; cls = getElementClass();<a name="line.434"></a>
<span class="sourceLineNo">435</span>                return cls == Float.class || cls == Double.class;<a name="line.435"></a>
<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>        @Override<a name="line.438"></a>
<span class="sourceLineNo">439</span>        public int getElementsPerItem() {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                return DTypeUtils.getElementsPerItem(getDType());<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>        @Override<a name="line.443"></a>
<span class="sourceLineNo">444</span>        public int getItemBytes() {<a name="line.444"></a>
<span class="sourceLineNo">445</span>                return DTypeUtils.getItemBytes(getDType(), getElementsPerItem());<a name="line.445"></a>
<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>        @Override<a name="line.448"></a>
<span class="sourceLineNo">449</span>        public int getSize() {<a name="line.449"></a>
<span class="sourceLineNo">450</span>                return size;<a name="line.450"></a>
<span class="sourceLineNo">451</span>        }<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>        @Override<a name="line.453"></a>
<span class="sourceLineNo">454</span>        public int[] getShape() {<a name="line.454"></a>
<span class="sourceLineNo">455</span>                // make a copy of the dimensions data, and put that out<a name="line.455"></a>
<span class="sourceLineNo">456</span>                if (shape == null) {<a name="line.456"></a>
<span class="sourceLineNo">457</span>                        logger.warn("Shape is null!!!");<a name="line.457"></a>
<span class="sourceLineNo">458</span>                        return new int[] {};<a name="line.458"></a>
<span class="sourceLineNo">459</span>                }<a name="line.459"></a>
<span class="sourceLineNo">460</span>                return shape.clone();<a name="line.460"></a>
<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>        @Override<a name="line.463"></a>
<span class="sourceLineNo">464</span>        public int getRank() {<a name="line.464"></a>
<span class="sourceLineNo">465</span>                return shape == null ? 0 : shape.length;<a name="line.465"></a>
<span class="sourceLineNo">466</span>        }<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
<span class="sourceLineNo">469</span>        public int getNbytes() {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                return getSize() * getItemBytes();<a name="line.470"></a>
<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>        /**<a name="line.473"></a>
<span class="sourceLineNo">474</span>         * Check for -1 placeholder in shape and replace if necessary<a name="line.474"></a>
<span class="sourceLineNo">475</span>         * @param shape<a name="line.475"></a>
<span class="sourceLineNo">476</span>         * @param size<a name="line.476"></a>
<span class="sourceLineNo">477</span>         */<a name="line.477"></a>
<span class="sourceLineNo">478</span>        private void checkShape(int[] shape, int size) {<a name="line.478"></a>
<span class="sourceLineNo">479</span>                int rank = shape.length;<a name="line.479"></a>
<span class="sourceLineNo">480</span>                int found = -1;<a name="line.480"></a>
<span class="sourceLineNo">481</span>                int nsize = 1;<a name="line.481"></a>
<span class="sourceLineNo">482</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.482"></a>
<span class="sourceLineNo">483</span>                        int d = shape[i];<a name="line.483"></a>
<span class="sourceLineNo">484</span>                        if (d == -1) {<a name="line.484"></a>
<span class="sourceLineNo">485</span>                                if (found == -1) {<a name="line.485"></a>
<span class="sourceLineNo">486</span>                                        found = i;<a name="line.486"></a>
<span class="sourceLineNo">487</span>                                } else {<a name="line.487"></a>
<span class="sourceLineNo">488</span>                                        logger.error("Can only have one -1 placeholder in shape");<a name="line.488"></a>
<span class="sourceLineNo">489</span>                                        throw new IllegalArgumentException("Can only have one -1 placeholder in shape");<a name="line.489"></a>
<span class="sourceLineNo">490</span>                                }<a name="line.490"></a>
<span class="sourceLineNo">491</span>                        } else {<a name="line.491"></a>
<span class="sourceLineNo">492</span>                                nsize *= d;<a name="line.492"></a>
<span class="sourceLineNo">493</span>                        }<a name="line.493"></a>
<span class="sourceLineNo">494</span>                }<a name="line.494"></a>
<span class="sourceLineNo">495</span>                if (found &gt;= 0) {<a name="line.495"></a>
<span class="sourceLineNo">496</span>                        shape[found] = size/nsize;<a name="line.496"></a>
<span class="sourceLineNo">497</span>                } else if (nsize != size &amp;&amp; !(rank == 0 &amp;&amp; size == 0)) {<a name="line.497"></a>
<span class="sourceLineNo">498</span>                        logger.error("New shape is not same size as old shape");<a name="line.498"></a>
<span class="sourceLineNo">499</span>                        throw new IllegalArgumentException("New size is not same as the old size. Old size is "+size+" new size is "+nsize+" and shape is "+Arrays.toString(shape));<a name="line.499"></a>
<span class="sourceLineNo">500</span>                }<a name="line.500"></a>
<span class="sourceLineNo">501</span>        }<a name="line.501"></a>
<span class="sourceLineNo">502</span><a name="line.502"></a>
<span class="sourceLineNo">503</span>        @Override<a name="line.503"></a>
<span class="sourceLineNo">504</span>        public void setShape(final int... shape) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>                int[] nshape = shape.clone();<a name="line.505"></a>
<span class="sourceLineNo">506</span>                checkShape(nshape, size);<a name="line.506"></a>
<span class="sourceLineNo">507</span>                if (Arrays.equals(this.shape, nshape)) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>                        return;<a name="line.508"></a>
<span class="sourceLineNo">509</span>                }<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>                if (stride != null) {<a name="line.511"></a>
<span class="sourceLineNo">512</span>                        // the only compatible shapes are ones where new dimensions are factors of old dimensions<a name="line.512"></a>
<span class="sourceLineNo">513</span>                        // or are combined adjacent old dimensions <a name="line.513"></a>
<span class="sourceLineNo">514</span>                        int[] oshape = this.shape;<a name="line.514"></a>
<span class="sourceLineNo">515</span>                        int orank = oshape.length;<a name="line.515"></a>
<span class="sourceLineNo">516</span>                        int nrank = nshape.length;<a name="line.516"></a>
<span class="sourceLineNo">517</span>                        int diff = nrank - orank;<a name="line.517"></a>
<span class="sourceLineNo">518</span>                        int[] nstride = new int[nrank];<a name="line.518"></a>
<span class="sourceLineNo">519</span>                        boolean ones = true;<a name="line.519"></a>
<span class="sourceLineNo">520</span>                        // work forwards for broadcasting cases<a name="line.520"></a>
<span class="sourceLineNo">521</span>                        for (int i = 0, j = 0; i &lt; orank || j &lt; nrank;) {<a name="line.521"></a>
<span class="sourceLineNo">522</span>                                if (j &gt;= diff &amp;&amp; i &lt; orank &amp;&amp; j &lt; nrank &amp;&amp; oshape[i] == nshape[j]) {<a name="line.522"></a>
<span class="sourceLineNo">523</span>                                        nstride[j++] = stride[i++];<a name="line.523"></a>
<span class="sourceLineNo">524</span>                                } else if (j &lt; nrank &amp;&amp; nshape[j] == 1) {<a name="line.524"></a>
<span class="sourceLineNo">525</span>                                        nstride[j++] = 0;<a name="line.525"></a>
<span class="sourceLineNo">526</span>                                } else if (i &lt; orank &amp;&amp; oshape[i] == 1) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>                                        i++;<a name="line.527"></a>
<span class="sourceLineNo">528</span>                                } else {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                                        if (j &lt; nrank)<a name="line.529"></a>
<span class="sourceLineNo">530</span>                                                j++;<a name="line.530"></a>
<span class="sourceLineNo">531</span>                                        if (i &lt; orank)<a name="line.531"></a>
<span class="sourceLineNo">532</span>                                                i++;<a name="line.532"></a>
<span class="sourceLineNo">533</span>                                        ones = false;<a name="line.533"></a>
<span class="sourceLineNo">534</span>                                }<a name="line.534"></a>
<span class="sourceLineNo">535</span>                        }<a name="line.535"></a>
<span class="sourceLineNo">536</span>                        if (!ones) { // not just ones differ in shapes<a name="line.536"></a>
<span class="sourceLineNo">537</span>                                int[] ostride = stride;<a name="line.537"></a>
<span class="sourceLineNo">538</span>                                int ob = 0;<a name="line.538"></a>
<span class="sourceLineNo">539</span>                                int oe = 1;<a name="line.539"></a>
<span class="sourceLineNo">540</span>                                int nb = 0;<a name="line.540"></a>
<span class="sourceLineNo">541</span>                                int ne = 1;<a name="line.541"></a>
<span class="sourceLineNo">542</span>                                while (ob &lt; orank &amp;&amp; nb &lt; nrank) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>                                        int ol = oshape[ob];<a name="line.543"></a>
<span class="sourceLineNo">544</span>                                        int nl = nshape[nb];<a name="line.544"></a>
<span class="sourceLineNo">545</span>                                        <a name="line.545"></a>
<span class="sourceLineNo">546</span>                                        if (nl &lt; ol) { // find group of shape dimensions that form common size<a name="line.546"></a>
<span class="sourceLineNo">547</span>                                                do { // case where new shape spreads single dimension over several dimensions<a name="line.547"></a>
<span class="sourceLineNo">548</span>                                                        if (ne == nrank) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                                                                break;<a name="line.549"></a>
<span class="sourceLineNo">550</span>                                                        }<a name="line.550"></a>
<span class="sourceLineNo">551</span>                                                        nl *= nshape[ne++];<a name="line.551"></a>
<span class="sourceLineNo">552</span>                                                } while (nl &lt; ol);<a name="line.552"></a>
<span class="sourceLineNo">553</span>                                                if (nl != ol) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                                                        logger.error("Subshape is incompatible with single dimension");<a name="line.554"></a>
<span class="sourceLineNo">555</span>                                                        throw new IllegalArgumentException("Subshape is incompatible with single dimension");<a name="line.555"></a>
<span class="sourceLineNo">556</span>                                                }<a name="line.556"></a>
<span class="sourceLineNo">557</span>                                                int on = ne - 1;<a name="line.557"></a>
<span class="sourceLineNo">558</span>                                                while (nshape[on] == 1) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                                                        on--;<a name="line.559"></a>
<span class="sourceLineNo">560</span>                                                }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>                                                nstride[on] = ostride[ob];<a name="line.562"></a>
<span class="sourceLineNo">563</span>                                                for (int n = on - 1; n &gt;= nb; n--) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                                                        if (nshape[n] == 1)<a name="line.564"></a>
<span class="sourceLineNo">565</span>                                                                continue;<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>                                                        nstride[n] = nshape[on] * nstride[on];<a name="line.567"></a>
<span class="sourceLineNo">568</span>                                                        on = n;<a name="line.568"></a>
<span class="sourceLineNo">569</span>                                                }<a name="line.569"></a>
<span class="sourceLineNo">570</span>                                        } else if (ol &lt; nl) {<a name="line.570"></a>
<span class="sourceLineNo">571</span>                                                do { // case where new shape combines several dimensions into one dimension<a name="line.571"></a>
<span class="sourceLineNo">572</span>                                                        if (oe == orank) {<a name="line.572"></a>
<span class="sourceLineNo">573</span>                                                                break;<a name="line.573"></a>
<span class="sourceLineNo">574</span>                                                        }<a name="line.574"></a>
<span class="sourceLineNo">575</span>                                                        ol *= oshape[oe++];<a name="line.575"></a>
<span class="sourceLineNo">576</span>                                                } while (ol &lt; nl);<a name="line.576"></a>
<span class="sourceLineNo">577</span>                                                if (nl != ol) {<a name="line.577"></a>
<span class="sourceLineNo">578</span>                                                        logger.error("Single dimension is incompatible with subshape");<a name="line.578"></a>
<span class="sourceLineNo">579</span>                                                        throw new IllegalArgumentException("Single dimension is incompatible with subshape");<a name="line.579"></a>
<span class="sourceLineNo">580</span>                                                }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>                                                int oo = oe - 1;<a name="line.582"></a>
<span class="sourceLineNo">583</span>                                                while (oshape[oo] == 1) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                                                        oo--;<a name="line.584"></a>
<span class="sourceLineNo">585</span>                                                }<a name="line.585"></a>
<span class="sourceLineNo">586</span>                                                int os = ostride[oo];<a name="line.586"></a>
<span class="sourceLineNo">587</span>                                                for (int o = oo - 1; o &gt;= ob; o--) {<a name="line.587"></a>
<span class="sourceLineNo">588</span>                                                        if (oshape[o] == 1)<a name="line.588"></a>
<span class="sourceLineNo">589</span>                                                                continue;<a name="line.589"></a>
<span class="sourceLineNo">590</span>                                                        if (ostride[o] != oshape[oo] * ostride[oo]) {<a name="line.590"></a>
<span class="sourceLineNo">591</span>                                                                logger.error("Subshape cannot be a non-contiguous view");<a name="line.591"></a>
<span class="sourceLineNo">592</span>                                                                throw new IllegalArgumentException("Subshape cannot be a non-contiguous view");<a name="line.592"></a>
<span class="sourceLineNo">593</span>                                                        }<a name="line.593"></a>
<span class="sourceLineNo">594</span>                                                        oo = o;<a name="line.594"></a>
<span class="sourceLineNo">595</span>                                                }<a name="line.595"></a>
<span class="sourceLineNo">596</span>                                                nstride[nb] = os;<a name="line.596"></a>
<span class="sourceLineNo">597</span>                                        } else {<a name="line.597"></a>
<span class="sourceLineNo">598</span>                                                nstride[nb] = ostride[ob];<a name="line.598"></a>
<span class="sourceLineNo">599</span>                                        }<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>                                        ob = oe++;<a name="line.601"></a>
<span class="sourceLineNo">602</span>                                        nb = ne++;<a name="line.602"></a>
<span class="sourceLineNo">603</span>                                }<a name="line.603"></a>
<span class="sourceLineNo">604</span>                        }<a name="line.604"></a>
<span class="sourceLineNo">605</span>        <a name="line.605"></a>
<span class="sourceLineNo">606</span>                        stride = nstride;<a name="line.606"></a>
<span class="sourceLineNo">607</span>                }<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>                setDirty();<a name="line.609"></a>
<span class="sourceLineNo">610</span>                if (this.shape != null &amp;&amp; metadata != null) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>                        reshapeMetadata(this.shape, nshape);<a name="line.611"></a>
<span class="sourceLineNo">612</span>                }<a name="line.612"></a>
<span class="sourceLineNo">613</span>                this.shape = nshape;<a name="line.613"></a>
<span class="sourceLineNo">614</span>        }<a name="line.614"></a>
<span class="sourceLineNo">615</span><a name="line.615"></a>
<span class="sourceLineNo">616</span>        @Override<a name="line.616"></a>
<span class="sourceLineNo">617</span>        public int[] getShapeRef() {<a name="line.617"></a>
<span class="sourceLineNo">618</span>                return shape;<a name="line.618"></a>
<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
<span class="sourceLineNo">620</span><a name="line.620"></a>
<span class="sourceLineNo">621</span>        @Override<a name="line.621"></a>
<span class="sourceLineNo">622</span>        public int getOffset() {<a name="line.622"></a>
<span class="sourceLineNo">623</span>                return offset;<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>        @Override<a name="line.626"></a>
<span class="sourceLineNo">627</span>        public int[] getStrides() {<a name="line.627"></a>
<span class="sourceLineNo">628</span>                return stride;<a name="line.628"></a>
<span class="sourceLineNo">629</span>        }<a name="line.629"></a>
<span class="sourceLineNo">630</span><a name="line.630"></a>
<span class="sourceLineNo">631</span>        @Override<a name="line.631"></a>
<span class="sourceLineNo">632</span>        public Serializable getBuffer() {<a name="line.632"></a>
<span class="sourceLineNo">633</span>                return odata;<a name="line.633"></a>
<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
<span class="sourceLineNo">635</span><a name="line.635"></a>
<span class="sourceLineNo">636</span>        @Override<a name="line.636"></a>
<span class="sourceLineNo">637</span>        public void overrideInternal(Serializable buffer, int... shape) {<a name="line.637"></a>
<span class="sourceLineNo">638</span>                if (buffer != null) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>                        odata = buffer;<a name="line.639"></a>
<span class="sourceLineNo">640</span>                        setData();<a name="line.640"></a>
<span class="sourceLineNo">641</span>                        setDirty();<a name="line.641"></a>
<span class="sourceLineNo">642</span>                }<a name="line.642"></a>
<span class="sourceLineNo">643</span>        <a name="line.643"></a>
<span class="sourceLineNo">644</span>                if (shape != null) {<a name="line.644"></a>
<span class="sourceLineNo">645</span>                        this.shape = shape.clone();<a name="line.645"></a>
<span class="sourceLineNo">646</span>                        size = ShapeUtils.calcSize(this.shape);<a name="line.646"></a>
<span class="sourceLineNo">647</span>                }<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>        /**<a name="line.650"></a>
<span class="sourceLineNo">651</span>         * Create a stride array from dataset<a name="line.651"></a>
<span class="sourceLineNo">652</span>         * @param a dataset<a name="line.652"></a>
<span class="sourceLineNo">653</span>         * @param offset output offset<a name="line.653"></a>
<span class="sourceLineNo">654</span>         * @return new strides<a name="line.654"></a>
<span class="sourceLineNo">655</span>         */<a name="line.655"></a>
<span class="sourceLineNo">656</span>        public static int[] createStrides(Dataset a, final int[] offset) {<a name="line.656"></a>
<span class="sourceLineNo">657</span>                return createStrides(a.getElementsPerItem(), a.getShapeRef(), a.getStrides(), a.getOffset(), offset);<a name="line.657"></a>
<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
<span class="sourceLineNo">659</span><a name="line.659"></a>
<span class="sourceLineNo">660</span>        /**<a name="line.660"></a>
<span class="sourceLineNo">661</span>         * Create a stride array from dataset<a name="line.661"></a>
<span class="sourceLineNo">662</span>         * @param isize<a name="line.662"></a>
<span class="sourceLineNo">663</span>         * @param shape<a name="line.663"></a>
<span class="sourceLineNo">664</span>         * @param oStride original stride<a name="line.664"></a>
<span class="sourceLineNo">665</span>         * @param oOffset original offset (only used if there is an original stride)<a name="line.665"></a>
<span class="sourceLineNo">666</span>         * @param offset output offset<a name="line.666"></a>
<span class="sourceLineNo">667</span>         * @return new strides<a name="line.667"></a>
<span class="sourceLineNo">668</span>         */<a name="line.668"></a>
<span class="sourceLineNo">669</span>        public static int[] createStrides(final int isize, final int[] shape, final int[] oStride, final int oOffset, final int[] offset) {<a name="line.669"></a>
<span class="sourceLineNo">670</span>                int rank = shape.length;<a name="line.670"></a>
<span class="sourceLineNo">671</span>                final int[] stride;<a name="line.671"></a>
<span class="sourceLineNo">672</span>                if (oStride == null) {<a name="line.672"></a>
<span class="sourceLineNo">673</span>                        offset[0] = 0;<a name="line.673"></a>
<span class="sourceLineNo">674</span>                        stride = new int[rank];<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        int s = isize;<a name="line.675"></a>
<span class="sourceLineNo">676</span>                        for (int j = rank - 1; j &gt;= 0; j--) {<a name="line.676"></a>
<span class="sourceLineNo">677</span>                                stride[j] = s;<a name="line.677"></a>
<span class="sourceLineNo">678</span>                                s *= shape[j];<a name="line.678"></a>
<span class="sourceLineNo">679</span>                        }<a name="line.679"></a>
<span class="sourceLineNo">680</span>                } else {<a name="line.680"></a>
<span class="sourceLineNo">681</span>                        offset[0] = oOffset;<a name="line.681"></a>
<span class="sourceLineNo">682</span>                        stride = oStride.clone();<a name="line.682"></a>
<span class="sourceLineNo">683</span>                }<a name="line.683"></a>
<span class="sourceLineNo">684</span>                return stride;<a name="line.684"></a>
<span class="sourceLineNo">685</span>        }<a name="line.685"></a>
<span class="sourceLineNo">686</span><a name="line.686"></a>
<span class="sourceLineNo">687</span>        /**<a name="line.687"></a>
<span class="sourceLineNo">688</span>         * Create a stride array from slice information and a dataset<a name="line.688"></a>
<span class="sourceLineNo">689</span>         * @param slice<a name="line.689"></a>
<span class="sourceLineNo">690</span>         * @param a dataset<a name="line.690"></a>
<span class="sourceLineNo">691</span>         * @param stride output stride<a name="line.691"></a>
<span class="sourceLineNo">692</span>         * @param offset output offset<a name="line.692"></a>
<span class="sourceLineNo">693</span>         * @return new shape<a name="line.693"></a>
<span class="sourceLineNo">694</span>         */<a name="line.694"></a>
<span class="sourceLineNo">695</span>        public static int[] createStrides(final SliceND slice, final Dataset a, final int[] stride, final int[] offset) {<a name="line.695"></a>
<span class="sourceLineNo">696</span>                return createStrides(slice, a.getElementsPerItem(), a.getShapeRef(), a.getStrides(), a.getOffset(), stride, offset);<a name="line.696"></a>
<span class="sourceLineNo">697</span>        }<a name="line.697"></a>
<span class="sourceLineNo">698</span><a name="line.698"></a>
<span class="sourceLineNo">699</span>        /**<a name="line.699"></a>
<span class="sourceLineNo">700</span>         * Create a stride array from slice and dataset information<a name="line.700"></a>
<span class="sourceLineNo">701</span>         * @param slice<a name="line.701"></a>
<span class="sourceLineNo">702</span>         * @param isize<a name="line.702"></a>
<span class="sourceLineNo">703</span>         * @param shape<a name="line.703"></a>
<span class="sourceLineNo">704</span>         * @param oStride original stride<a name="line.704"></a>
<span class="sourceLineNo">705</span>         * @param oOffset original offset (only used if there is an original stride)<a name="line.705"></a>
<span class="sourceLineNo">706</span>         * @param stride output stride<a name="line.706"></a>
<span class="sourceLineNo">707</span>         * @param offset output offset<a name="line.707"></a>
<span class="sourceLineNo">708</span>         * @return new shape<a name="line.708"></a>
<span class="sourceLineNo">709</span>         */<a name="line.709"></a>
<span class="sourceLineNo">710</span>        public static int[] createStrides(final SliceND slice, final int isize, final int[] shape, final int[] oStride, final int oOffset, final int[] stride, final int[] offset) {<a name="line.710"></a>
<span class="sourceLineNo">711</span>                int[] lstart = slice.getStart();<a name="line.711"></a>
<span class="sourceLineNo">712</span>                int[] lstep = slice.getStep();<a name="line.712"></a>
<span class="sourceLineNo">713</span>                int[] newShape = slice.getShape();<a name="line.713"></a>
<span class="sourceLineNo">714</span>                int rank = shape.length;<a name="line.714"></a>
<span class="sourceLineNo">715</span><a name="line.715"></a>
<span class="sourceLineNo">716</span>                if (oStride == null) {<a name="line.716"></a>
<span class="sourceLineNo">717</span>                        int s = isize;<a name="line.717"></a>
<span class="sourceLineNo">718</span>                        offset[0] = 0;<a name="line.718"></a>
<span class="sourceLineNo">719</span>                        for (int j = rank - 1; j &gt;= 0; j--) {<a name="line.719"></a>
<span class="sourceLineNo">720</span>                                stride[j] = s * lstep[j];<a name="line.720"></a>
<span class="sourceLineNo">721</span>                                offset[0] += s * lstart[j];<a name="line.721"></a>
<span class="sourceLineNo">722</span>                                s *= shape[j];<a name="line.722"></a>
<span class="sourceLineNo">723</span>                        }<a name="line.723"></a>
<span class="sourceLineNo">724</span>                } else {<a name="line.724"></a>
<span class="sourceLineNo">725</span>                        offset[0] = oOffset;<a name="line.725"></a>
<span class="sourceLineNo">726</span>                        for (int j = 0; j &lt; rank; j++) {<a name="line.726"></a>
<span class="sourceLineNo">727</span>                                int s = oStride[j];<a name="line.727"></a>
<span class="sourceLineNo">728</span>                                stride[j] = lstep[j] * s;<a name="line.728"></a>
<span class="sourceLineNo">729</span>                                offset[0] += lstart[j] * s;<a name="line.729"></a>
<span class="sourceLineNo">730</span>                        }<a name="line.730"></a>
<span class="sourceLineNo">731</span>                }<a name="line.731"></a>
<span class="sourceLineNo">732</span><a name="line.732"></a>
<span class="sourceLineNo">733</span>                return newShape;<a name="line.733"></a>
<span class="sourceLineNo">734</span>        }<a name="line.734"></a>
<span class="sourceLineNo">735</span><a name="line.735"></a>
<span class="sourceLineNo">736</span>        @Override<a name="line.736"></a>
<span class="sourceLineNo">737</span>        public Dataset getBroadcastView(int... broadcastShape) {<a name="line.737"></a>
<span class="sourceLineNo">738</span>                AbstractDataset view = getView(true);<a name="line.738"></a>
<span class="sourceLineNo">739</span>                <a name="line.739"></a>
<span class="sourceLineNo">740</span>                if (!Arrays.equals(shape, broadcastShape)) {<a name="line.740"></a>
<span class="sourceLineNo">741</span>                        List&lt;int[]&gt; nShapes = BroadcastUtils.broadcastShapesToMax(broadcastShape, shape);<a name="line.741"></a>
<span class="sourceLineNo">742</span>                        view.setShape(nShapes.get(0));<a name="line.742"></a>
<span class="sourceLineNo">743</span>                        view.stride = BroadcastUtils.createBroadcastStrides(view, broadcastShape);<a name="line.743"></a>
<span class="sourceLineNo">744</span>                        view.base = this;<a name="line.744"></a>
<span class="sourceLineNo">745</span>                        view.shape = broadcastShape.clone();<a name="line.745"></a>
<span class="sourceLineNo">746</span>                        view.size = ShapeUtils.calcSize(broadcastShape);<a name="line.746"></a>
<span class="sourceLineNo">747</span>                        if (view.name == null || view.name.isEmpty()) {<a name="line.747"></a>
<span class="sourceLineNo">748</span>                                view.name = "Broadcast from " + Arrays.toString(shape);<a name="line.748"></a>
<span class="sourceLineNo">749</span>                        } else {<a name="line.749"></a>
<span class="sourceLineNo">750</span>                                view.name = "Broadcast of " + view.name + " from " + Arrays.toString(shape);<a name="line.750"></a>
<span class="sourceLineNo">751</span>                        }<a name="line.751"></a>
<span class="sourceLineNo">752</span>                }<a name="line.752"></a>
<span class="sourceLineNo">753</span>                return view;<a name="line.753"></a>
<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>        @Override<a name="line.756"></a>
<span class="sourceLineNo">757</span>        public Dataset getSliceView(final int[] start, final int[] stop, final int[] step) {<a name="line.757"></a>
<span class="sourceLineNo">758</span>                return getSliceView(new SliceND(shape, start, stop, step));<a name="line.758"></a>
<span class="sourceLineNo">759</span>        }<a name="line.759"></a>
<span class="sourceLineNo">760</span><a name="line.760"></a>
<span class="sourceLineNo">761</span>        @Override<a name="line.761"></a>
<span class="sourceLineNo">762</span>        public Dataset getSliceView(Slice... slice) {<a name="line.762"></a>
<span class="sourceLineNo">763</span>                if (slice == null || slice.length == 0) {<a name="line.763"></a>
<span class="sourceLineNo">764</span>                        return getView(true);<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>                return getSliceView(new SliceND(shape, slice));<a name="line.767"></a>
<span class="sourceLineNo">768</span>        }<a name="line.768"></a>
<span class="sourceLineNo">769</span><a name="line.769"></a>
<span class="sourceLineNo">770</span>        /**<a name="line.770"></a>
<span class="sourceLineNo">771</span>         * Get a slice of the dataset. The returned dataset is a view on a selection of items<a name="line.771"></a>
<span class="sourceLineNo">772</span>         * @param slice<a name="line.772"></a>
<span class="sourceLineNo">773</span>         * @return slice view<a name="line.773"></a>
<span class="sourceLineNo">774</span>         */<a name="line.774"></a>
<span class="sourceLineNo">775</span>        @Override<a name="line.775"></a>
<span class="sourceLineNo">776</span>        public Dataset getSliceView(SliceND slice) {<a name="line.776"></a>
<span class="sourceLineNo">777</span>                if (slice.isAll()) {<a name="line.777"></a>
<span class="sourceLineNo">778</span>                        return getView(true);<a name="line.778"></a>
<span class="sourceLineNo">779</span>                }<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>                final int rank = shape.length;<a name="line.781"></a>
<span class="sourceLineNo">782</span>                int[] sStride = new int[rank];<a name="line.782"></a>
<span class="sourceLineNo">783</span>                int[] sOffset = new int[1];<a name="line.783"></a>
<span class="sourceLineNo">784</span><a name="line.784"></a>
<span class="sourceLineNo">785</span>                int[] sShape = createStrides(slice, this, sStride, sOffset);<a name="line.785"></a>
<span class="sourceLineNo">786</span>        <a name="line.786"></a>
<span class="sourceLineNo">787</span>                AbstractDataset s = getView(false);<a name="line.787"></a>
<span class="sourceLineNo">788</span>                s.shape = sShape;<a name="line.788"></a>
<span class="sourceLineNo">789</span>                s.size = ShapeUtils.calcSize(sShape);<a name="line.789"></a>
<span class="sourceLineNo">790</span>                s.stride = sStride;<a name="line.790"></a>
<span class="sourceLineNo">791</span>                s.offset = sOffset[0];<a name="line.791"></a>
<span class="sourceLineNo">792</span>                s.base = this;<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>                s.metadata = copyMetadata();<a name="line.794"></a>
<span class="sourceLineNo">795</span>                s.sliceMetadata(true, slice);<a name="line.795"></a>
<span class="sourceLineNo">796</span><a name="line.796"></a>
<span class="sourceLineNo">797</span>                s.setDirty();<a name="line.797"></a>
<span class="sourceLineNo">798</span>                s.setName(name + BLOCK_OPEN + slice + BLOCK_CLOSE);<a name="line.798"></a>
<span class="sourceLineNo">799</span><a name="line.799"></a>
<span class="sourceLineNo">800</span>                return s;<a name="line.800"></a>
<span class="sourceLineNo">801</span>        }<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 flattened view index of given position <a name="line.804"></a>
<span class="sourceLineNo">805</span>         * @param pos<a name="line.805"></a>
<span class="sourceLineNo">806</span>         *            the integer array specifying the n-D position<a name="line.806"></a>
<span class="sourceLineNo">807</span>         * @return the index on the flattened dataset<a name="line.807"></a>
<span class="sourceLineNo">808</span>         */<a name="line.808"></a>
<span class="sourceLineNo">809</span>        private int getFlat1DIndex(final int[] pos) {<a name="line.809"></a>
<span class="sourceLineNo">810</span>                final int imax = pos.length;<a name="line.810"></a>
<span class="sourceLineNo">811</span>                if (imax == 0) {<a name="line.811"></a>
<span class="sourceLineNo">812</span>                        return 0;<a name="line.812"></a>
<span class="sourceLineNo">813</span>                }<a name="line.813"></a>
<span class="sourceLineNo">814</span><a name="line.814"></a>
<span class="sourceLineNo">815</span>                return get1DIndexFromShape(pos);<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>        /**<a name="line.818"></a>
<span class="sourceLineNo">819</span>         * @since 2.0<a name="line.819"></a>
<span class="sourceLineNo">820</span>         */<a name="line.820"></a>
<span class="sourceLineNo">821</span>        protected int getFirst1DIndex() {<a name="line.821"></a>
<span class="sourceLineNo">822</span>                if (shape == null) {<a name="line.822"></a>
<span class="sourceLineNo">823</span>                        throw new IllegalArgumentException("Cannot find an index from a null shape");<a name="line.823"></a>
<span class="sourceLineNo">824</span>                }<a name="line.824"></a>
<span class="sourceLineNo">825</span>                return stride == null ? 0 : offset;<a name="line.825"></a>
<span class="sourceLineNo">826</span>        }<a name="line.826"></a>
<span class="sourceLineNo">827</span><a name="line.827"></a>
<span class="sourceLineNo">828</span>        @Override<a name="line.828"></a>
<span class="sourceLineNo">829</span>        public int get1DIndex(final int... n) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>                if (n.length == 0 &amp;&amp; shape.length == 0)<a name="line.830"></a>
<span class="sourceLineNo">831</span>                        return offset;<a name="line.831"></a>
<span class="sourceLineNo">832</span><a name="line.832"></a>
<span class="sourceLineNo">833</span>                return stride == null ? get1DIndexFromShape(n) : get1DIndexFromStrides(n);<a name="line.833"></a>
<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>        private static void throwAIOOBException(int i, int s, int d) {<a name="line.836"></a>
<span class="sourceLineNo">837</span>                throw new ArrayIndexOutOfBoundsException("Index (" + i + ") out of range [-" + s + "," + s<a name="line.837"></a>
<span class="sourceLineNo">838</span>                                + "] in dimension " + d);<a name="line.838"></a>
<span class="sourceLineNo">839</span>        }<a name="line.839"></a>
<span class="sourceLineNo">840</span><a name="line.840"></a>
<span class="sourceLineNo">841</span>        /**<a name="line.841"></a>
<span class="sourceLineNo">842</span>         * @param i<a name="line.842"></a>
<span class="sourceLineNo">843</span>         * @return the index on the data array corresponding to that location<a name="line.843"></a>
<span class="sourceLineNo">844</span>         */<a name="line.844"></a>
<span class="sourceLineNo">845</span>        protected int get1DIndex(int i) {<a name="line.845"></a>
<span class="sourceLineNo">846</span>                if (shape == null) {<a name="line.846"></a>
<span class="sourceLineNo">847</span>                        throw new IllegalArgumentException("Cannot find an index from a null shape");<a name="line.847"></a>
<span class="sourceLineNo">848</span>                }<a name="line.848"></a>
<span class="sourceLineNo">849</span>                if (shape.length &gt; 1) {<a name="line.849"></a>
<span class="sourceLineNo">850</span>                        logger.error("This dataset is not 1D but was addressed as such");<a name="line.850"></a>
<span class="sourceLineNo">851</span>                        throw new UnsupportedOperationException("This dataset is not 1D but was addressed as such");<a name="line.851"></a>
<span class="sourceLineNo">852</span>                }<a name="line.852"></a>
<span class="sourceLineNo">853</span>                if (i &lt; 0) {<a name="line.853"></a>
<span class="sourceLineNo">854</span>                        i += shape[0];<a name="line.854"></a>
<span class="sourceLineNo">855</span>                }<a name="line.855"></a>
<span class="sourceLineNo">856</span>                if (i &lt; 0 || i &gt;= shape[0]) {<a name="line.856"></a>
<span class="sourceLineNo">857</span>                        throwAIOOBException(i, shape[0], 0);<a name="line.857"></a>
<span class="sourceLineNo">858</span>                }<a name="line.858"></a>
<span class="sourceLineNo">859</span>                return stride == null ? i : i*stride[0] + offset;<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>        /**<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 the index on the data array corresponding to that location<a name="line.865"></a>
<span class="sourceLineNo">866</span>         */<a name="line.866"></a>
<span class="sourceLineNo">867</span>        protected int get1DIndex(int i, int j) {<a name="line.867"></a>
<span class="sourceLineNo">868</span>                if (shape == null) {<a name="line.868"></a>
<span class="sourceLineNo">869</span>                        throw new IllegalArgumentException("Cannot find an index from a null shape");<a name="line.869"></a>
<span class="sourceLineNo">870</span>                }<a name="line.870"></a>
<span class="sourceLineNo">871</span>                if (shape.length != 2) {<a name="line.871"></a>
<span class="sourceLineNo">872</span>                        logger.error("This dataset is not 2D but was addressed as such");<a name="line.872"></a>
<span class="sourceLineNo">873</span>                        throw new UnsupportedOperationException("This dataset is not 2D but was addressed as such");<a name="line.873"></a>
<span class="sourceLineNo">874</span>                }<a name="line.874"></a>
<span class="sourceLineNo">875</span>                if (i &lt; 0) {<a name="line.875"></a>
<span class="sourceLineNo">876</span>                        i += shape[0];<a name="line.876"></a>
<span class="sourceLineNo">877</span>                }<a name="line.877"></a>
<span class="sourceLineNo">878</span>                if (i &lt; 0 || i &gt;= shape[0]) {<a name="line.878"></a>
<span class="sourceLineNo">879</span>                        throwAIOOBException(i, shape[0], 0);<a name="line.879"></a>
<span class="sourceLineNo">880</span>                }<a name="line.880"></a>
<span class="sourceLineNo">881</span>                if (j &lt; 0) {<a name="line.881"></a>
<span class="sourceLineNo">882</span>                        j += shape[1];<a name="line.882"></a>
<span class="sourceLineNo">883</span>                }<a name="line.883"></a>
<span class="sourceLineNo">884</span>                if (j &lt; 0 || j &gt;= shape[1]) {<a name="line.884"></a>
<span class="sourceLineNo">885</span>                        throwAIOOBException(i, shape[1], 1);<a name="line.885"></a>
<span class="sourceLineNo">886</span>                }<a name="line.886"></a>
<span class="sourceLineNo">887</span>                return stride == null ? i*shape[1] + j : i*stride[0] + j*stride[1] + offset;<a name="line.887"></a>
<span class="sourceLineNo">888</span>        }<a name="line.888"></a>
<span class="sourceLineNo">889</span><a name="line.889"></a>
<span class="sourceLineNo">890</span>        protected int get1DIndexFromShape(final int[] n) {<a name="line.890"></a>
<span class="sourceLineNo">891</span>                return get1DIndexFromShape(shape, n);<a name="line.891"></a>
<span class="sourceLineNo">892</span>        }<a name="line.892"></a>
<span class="sourceLineNo">893</span><a name="line.893"></a>
<span class="sourceLineNo">894</span>        protected static int get1DIndexFromShape(final int[] shape, final int[] n) {<a name="line.894"></a>
<span class="sourceLineNo">895</span>                if (shape == null) {<a name="line.895"></a>
<span class="sourceLineNo">896</span>                        throw new IllegalArgumentException("Cannot find an index from a null shape");<a name="line.896"></a>
<span class="sourceLineNo">897</span>                }<a name="line.897"></a>
<span class="sourceLineNo">898</span>                final int rank = shape.length;<a name="line.898"></a>
<span class="sourceLineNo">899</span>                if (rank != n.length) {<a name="line.899"></a>
<span class="sourceLineNo">900</span>                        String errMsg = String.format("Number of position values must be equal to rank of %d", rank);<a name="line.900"></a>
<span class="sourceLineNo">901</span>                        logger.error(errMsg);<a name="line.901"></a>
<span class="sourceLineNo">902</span>                        throw new IllegalArgumentException(errMsg);<a name="line.902"></a>
<span class="sourceLineNo">903</span>                }<a name="line.903"></a>
<span class="sourceLineNo">904</span>                int index = 0;<a name="line.904"></a>
<span class="sourceLineNo">905</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.905"></a>
<span class="sourceLineNo">906</span>                        final int si = shape[i];<a name="line.906"></a>
<span class="sourceLineNo">907</span>                        int ni = n[i];<a name="line.907"></a>
<span class="sourceLineNo">908</span>                        if (ni &lt; 0) {<a name="line.908"></a>
<span class="sourceLineNo">909</span>                                ni += si;<a name="line.909"></a>
<span class="sourceLineNo">910</span>                        }<a name="line.910"></a>
<span class="sourceLineNo">911</span>                        if (ni &lt; 0 || ni &gt;= si) {<a name="line.911"></a>
<span class="sourceLineNo">912</span>                                throwAIOOBException(ni, si, i);<a name="line.912"></a>
<span class="sourceLineNo">913</span>                        }<a name="line.913"></a>
<span class="sourceLineNo">914</span>                        index = index * si + ni;<a name="line.914"></a>
<span class="sourceLineNo">915</span>                }<a name="line.915"></a>
<span class="sourceLineNo">916</span><a name="line.916"></a>
<span class="sourceLineNo">917</span>                return index;<a name="line.917"></a>
<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
<span class="sourceLineNo">919</span><a name="line.919"></a>
<span class="sourceLineNo">920</span>        private int get1DIndexFromStrides(final int[] n) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                return get1DIndexFromStrides(shape, stride, offset, n);<a name="line.921"></a>
<span class="sourceLineNo">922</span>        }<a name="line.922"></a>
<span class="sourceLineNo">923</span><a name="line.923"></a>
<span class="sourceLineNo">924</span>        private static int get1DIndexFromStrides(final int[] shape, final int[] stride, final int offset, final int[] n) {<a name="line.924"></a>
<span class="sourceLineNo">925</span>                if (shape == null) {<a name="line.925"></a>
<span class="sourceLineNo">926</span>                        throw new IllegalArgumentException("Cannot find an index from a null shape");<a name="line.926"></a>
<span class="sourceLineNo">927</span>                }<a name="line.927"></a>
<span class="sourceLineNo">928</span>                final int rank = shape.length;<a name="line.928"></a>
<span class="sourceLineNo">929</span>                if (rank != n.length) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>                        String errMsg = String.format("Number of position values must be equal to rank of %d", rank);<a name="line.930"></a>
<span class="sourceLineNo">931</span>                        logger.error(errMsg);<a name="line.931"></a>
<span class="sourceLineNo">932</span>                        throw new IllegalArgumentException(errMsg);<a name="line.932"></a>
<span class="sourceLineNo">933</span>                }<a name="line.933"></a>
<span class="sourceLineNo">934</span>                int index = offset;<a name="line.934"></a>
<span class="sourceLineNo">935</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.935"></a>
<span class="sourceLineNo">936</span>                        final int st = stride[i];<a name="line.936"></a>
<span class="sourceLineNo">937</span>                        if (st != 0) { // not broadcasted<a name="line.937"></a>
<span class="sourceLineNo">938</span>                                final int si = shape[i];<a name="line.938"></a>
<span class="sourceLineNo">939</span>                                int ni = n[i];<a name="line.939"></a>
<span class="sourceLineNo">940</span>                                if (ni &lt; 0) {<a name="line.940"></a>
<span class="sourceLineNo">941</span>                                        ni += si;<a name="line.941"></a>
<span class="sourceLineNo">942</span>                                }<a name="line.942"></a>
<span class="sourceLineNo">943</span>                                if (ni &lt; 0 || ni &gt;= si) {<a name="line.943"></a>
<span class="sourceLineNo">944</span>                                        throwAIOOBException(ni, si, i);<a name="line.944"></a>
<span class="sourceLineNo">945</span>                                }<a name="line.945"></a>
<span class="sourceLineNo">946</span>                                index += st * ni;<a name="line.946"></a>
<span class="sourceLineNo">947</span>                        }<a name="line.947"></a>
<span class="sourceLineNo">948</span>                }<a name="line.948"></a>
<span class="sourceLineNo">949</span>                return index;<a name="line.949"></a>
<span class="sourceLineNo">950</span>        }<a name="line.950"></a>
<span class="sourceLineNo">951</span><a name="line.951"></a>
<span class="sourceLineNo">952</span>        @Override<a name="line.952"></a>
<span class="sourceLineNo">953</span>        public int[] getNDPosition(final int n) {<a name="line.953"></a>
<span class="sourceLineNo">954</span>                if (isIndexInRange(n)) {<a name="line.954"></a>
<span class="sourceLineNo">955</span>                        throw new IllegalArgumentException("Index provided " + n<a name="line.955"></a>
<span class="sourceLineNo">956</span>                                        + "is larger then the size of the containing array");<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>                return stride == null ? ShapeUtils.getNDPositionFromShape(n, shape) : getNDPositionFromStrides(n);<a name="line.959"></a>
<span class="sourceLineNo">960</span>        }<a name="line.960"></a>
<span class="sourceLineNo">961</span><a name="line.961"></a>
<span class="sourceLineNo">962</span>        private boolean isIndexInRange(final int n) {<a name="line.962"></a>
<span class="sourceLineNo">963</span>                if (stride == null) {<a name="line.963"></a>
<span class="sourceLineNo">964</span>                        return n &gt;= size;<a name="line.964"></a>
<span class="sourceLineNo">965</span>                }<a name="line.965"></a>
<span class="sourceLineNo">966</span>                return n &gt;= getBufferLength();<a name="line.966"></a>
<span class="sourceLineNo">967</span>        }<a name="line.967"></a>
<span class="sourceLineNo">968</span><a name="line.968"></a>
<span class="sourceLineNo">969</span>        /**<a name="line.969"></a>
<span class="sourceLineNo">970</span>         * @return entire buffer length<a name="line.970"></a>
<span class="sourceLineNo">971</span>         */<a name="line.971"></a>
<span class="sourceLineNo">972</span>        abstract protected int getBufferLength();<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>        private int[] getNDPositionFromStrides(int n) {<a name="line.974"></a>
<span class="sourceLineNo">975</span>                n -= offset;<a name="line.975"></a>
<span class="sourceLineNo">976</span>                int rank = shape.length;<a name="line.976"></a>
<span class="sourceLineNo">977</span>                if (rank == 1) {<a name="line.977"></a>
<span class="sourceLineNo">978</span>                        return new int[] { n / stride[0] };<a name="line.978"></a>
<span class="sourceLineNo">979</span>                }<a name="line.979"></a>
<span class="sourceLineNo">980</span><a name="line.980"></a>
<span class="sourceLineNo">981</span>                int[] output = new int[rank];<a name="line.981"></a>
<span class="sourceLineNo">982</span>                int i = 0;<a name="line.982"></a>
<span class="sourceLineNo">983</span>                while (i != n) { // TODO find more efficient way than this exhaustive search<a name="line.983"></a>
<span class="sourceLineNo">984</span>                        int j = rank - 1;<a name="line.984"></a>
<span class="sourceLineNo">985</span>                        for (; j &gt;= 0; j--) {<a name="line.985"></a>
<span class="sourceLineNo">986</span>                                output[j]++;<a name="line.986"></a>
<span class="sourceLineNo">987</span>                                i += stride[j];<a name="line.987"></a>
<span class="sourceLineNo">988</span>                                if (output[j] &gt;= shape[j]) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>                                        output[j] = 0;<a name="line.989"></a>
<span class="sourceLineNo">990</span>                                        i -= shape[j] * stride[j];<a name="line.990"></a>
<span class="sourceLineNo">991</span>                                } else {<a name="line.991"></a>
<span class="sourceLineNo">992</span>                                        break;<a name="line.992"></a>
<span class="sourceLineNo">993</span>                                }<a name="line.993"></a>
<span class="sourceLineNo">994</span>                        }<a name="line.994"></a>
<span class="sourceLineNo">995</span>                        if (j == -1) {<a name="line.995"></a>
<span class="sourceLineNo">996</span>                                logger.error("Index was not found in this strided dataset");<a name="line.996"></a>
<span class="sourceLineNo">997</span>                                throw new IllegalArgumentException("Index was not found in this strided dataset");<a name="line.997"></a>
<span class="sourceLineNo">998</span>                        }<a name="line.998"></a>
<span class="sourceLineNo">999</span>                }<a name="line.999"></a>
<span class="sourceLineNo">1000</span><a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                return output;<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>        }<a name="line.1002"></a>
<span class="sourceLineNo">1003</span><a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        @Override<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>        public int checkAxis(int axis) {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                return ShapeUtils.checkAxis(shape.length, axis);<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>        }<a name="line.1007"></a>
<span class="sourceLineNo">1008</span><a name="line.1008"></a>
<span class="sourceLineNo">1009</span>        @Deprecated<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>        protected static int checkAxis(int rank, int axis) {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                return ShapeUtils.checkAxis(rank, axis);<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span><a name="line.1013"></a>
<span class="sourceLineNo">1014</span>        protected static final char BLOCK_OPEN = '[';<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>        protected static final char BLOCK_CLOSE = ']';<a name="line.1015"></a>
<span class="sourceLineNo">1016</span><a name="line.1016"></a>
<span class="sourceLineNo">1017</span>        @Override<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>        public String toString() {<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                final int rank = shape == null ? 0 : shape.length;<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                final StringBuilder out = new StringBuilder();<a name="line.1020"></a>
<span class="sourceLineNo">1021</span><a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                if (DTypeUtils.isDTypeElemental(getDType())) {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        out.append("Dataset ");<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                } else {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                        out.append("Compound dataset (");<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                        out.append(getElementsPerItem());<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                        out.append(") ");<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                }<a name="line.1028"></a>
<span class="sourceLineNo">1029</span><a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                if (name != null &amp;&amp; name.length() &gt; 0) {<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                        out.append("'");<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                        out.append(name);<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                        out.append("' has shape ");<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                } else {<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                        out.append("shape is ");<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                }<a name="line.1036"></a>
<span class="sourceLineNo">1037</span><a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                out.append(BLOCK_OPEN);<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                if (rank &gt; 0) {<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                        out.append(shape[0]);<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                }<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                for (int i = 1; i &lt; rank; i++) {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                        out.append(", " + shape[i]);<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                out.append(BLOCK_CLOSE);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                return out.toString();<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>        }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span><a name="line.1048"></a>
<span class="sourceLineNo">1049</span>        @Override<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>        public String toString(boolean showData) {<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>                if (!showData) {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                        return toString();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                }<a name="line.1053"></a>
<span class="sourceLineNo">1054</span><a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                if (size == 0) {<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>                        return "[]";<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                }<a name="line.1057"></a>
<span class="sourceLineNo">1058</span><a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                final int rank = shape == null ? 0 : shape.length;<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                final StringBuilder out = new StringBuilder();<a name="line.1060"></a>
<span class="sourceLineNo">1061</span><a name="line.1061"></a>
<span class="sourceLineNo">1062</span>                if (rank &gt; 0) {<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>                        int[] pos = new int[rank];<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>                        final StringBuilder lead = new StringBuilder();<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>                        printBlocks(out, lead, 0, pos);<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                } else {<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                        out.append(getString());<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                }<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                return out.toString();<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>        }<a name="line.1070"></a>
<span class="sourceLineNo">1071</span><a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        /**<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>         * Limit to strings output via the toString() method<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>         */<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>        private static int maxStringLength = 120;<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>         * Set maximum line length for toString() method<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>         * @param maxLineLength<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>         */<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>        public static void setMaxLineLength(int maxLineLength) {<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>                maxStringLength = maxLineLength;<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>        }<a name="line.1083"></a>
<span class="sourceLineNo">1084</span><a name="line.1084"></a>
<span class="sourceLineNo">1085</span>        /**<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>         * @return maximum line length for toString() method<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>         */<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>        public static int getMaxLineLength() {<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                return maxStringLength;<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>        }<a name="line.1090"></a>
<span class="sourceLineNo">1091</span><a name="line.1091"></a>
<span class="sourceLineNo">1092</span>        /**<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>         * Limit to number of sub-blocks output via the toString() method<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>         */<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>        private static final int MAX_SUBBLOCKS = 6;<a name="line.1095"></a>
<span class="sourceLineNo">1096</span><a name="line.1096"></a>
<span class="sourceLineNo">1097</span>        private final static String SEPARATOR = ",";<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>        private final static String SPACE = " ";<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>        private final static String ELLIPSIS = "...";<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        private final static String NEWLINE = "\n";<a name="line.1100"></a>
<span class="sourceLineNo">1101</span><a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        /**<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>         * Make a line of output for last dimension of dataset<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>         * <a name="line.1104"></a>
<span class="sourceLineNo">1105</span>         * @param start<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>         * @return line<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>         */<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>        private StringBuilder makeLine(final int end, final int[] start) {<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                StringBuilder line = new StringBuilder();<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                final int[] pos;<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                if (end &gt;= start.length) {<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>                        pos = Arrays.copyOf(start, end + 1);<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>                } else {<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>                        pos = start;<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>                }<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                pos[end] = 0;<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                line.append(BLOCK_OPEN);<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                line.append(getString(pos));<a name="line.1118"></a>
<span class="sourceLineNo">1119</span><a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                final int length = shape[end];<a name="line.1120"></a>
<span class="sourceLineNo">1121</span><a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                // trim elements printed if length exceed estimate of maximum elements<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>                int excess = length - maxStringLength / 3; // space + number + separator<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                int midIndex = -1;<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                if (excess &gt; 0) {<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>                        int index = (length - excess) / 2;<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                        for (int y = 1; y &lt; index; y++) {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                                line.append(SEPARATOR + SPACE);<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                                pos[end] = y;<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>                                line.append(getString(pos));<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>                        }<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>                        midIndex = line.length() + 2;<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>                        index = (length + excess) / 2;<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                        for (int y = index; y &lt; length; y++) {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                                line.append(SEPARATOR + SPACE);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                                pos[end] = y;<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                                line.append(getString(pos));<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                        }<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                } else {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                        for (int y = 1; y &lt; length; y++) {<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                                line.append(SEPARATOR + SPACE);<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                                pos[end] = y;<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                                line.append(getString(pos));<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                        }<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                }<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                line.append(BLOCK_CLOSE);<a name="line.1146"></a>
<span class="sourceLineNo">1147</span><a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                // trim string down to limit<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                int lineLength = line.length();<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>                excess = lineLength - maxStringLength - ELLIPSIS.length() - 1;<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                if (excess &gt; 0) {<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                        int index = (lineLength - excess) / 2;<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>                        if (midIndex &gt; 0 &amp;&amp; index &gt; midIndex) {<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                                index = midIndex;<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>                        } else {<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                                index = line.lastIndexOf(SEPARATOR, index) + 2;<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                        }<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                        StringBuilder out = new StringBuilder(line.subSequence(0, index));<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                        out.append(ELLIPSIS + SEPARATOR);<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                        index = (lineLength + excess) / 2;<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                        if (midIndex &gt; 0 &amp;&amp; index &lt;= midIndex) {<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                                index = midIndex - 1;<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                        } else {<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>                                index = line.indexOf(SEPARATOR, index) + 1;<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>                        }<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>                        out.append(line.subSequence(index, lineLength));<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>                        return out;<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                } else if (midIndex &gt; 0) { // add ellipsis<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                        StringBuilder out = new StringBuilder(line.subSequence(0, midIndex));<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                        out.append(ELLIPSIS + SEPARATOR + SPACE);<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>                        out.append(line.subSequence(midIndex, lineLength));<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                        return out;<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                }<a name="line.1173"></a>
<span class="sourceLineNo">1174</span><a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                return line;<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>        }<a name="line.1176"></a>
<span class="sourceLineNo">1177</span><a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        /**<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>         * recursive method to print blocks<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>         */<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>        private void printBlocks(final StringBuilder out, final StringBuilder lead, final int level, final int[] pos) {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>                if (out.length() &gt; 0) {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>                        char last = out.charAt(out.length() - 1);<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>                        if (last != BLOCK_OPEN) {<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>                                out.append(lead);<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>                        }<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                }<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                final int end = getRank() - 1;<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                if (level != end) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                        out.append(BLOCK_OPEN);<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                        int length = shape[level];<a name="line.1191"></a>
<span class="sourceLineNo">1192</span><a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                        // first sub-block<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                        pos[level] = 0;<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                        StringBuilder newlead = new StringBuilder(lead);<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                        newlead.append(SPACE);<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                        printBlocks(out, newlead, level + 1, pos);<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                        if (length &lt; 2) { // escape<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                                out.append(BLOCK_CLOSE);<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>                                return;<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                        }<a name="line.1201"></a>
<span class="sourceLineNo">1202</span><a name="line.1202"></a>
<span class="sourceLineNo">1203</span>                        out.append(SEPARATOR + NEWLINE);<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>                        for (int i = level + 1; i &lt; end; i++) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                                out.append(NEWLINE);<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                        }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span><a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                        // middle sub-blocks<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                        if (length &lt; MAX_SUBBLOCKS) {<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                                for (int x = 1; x &lt; length - 1; x++) {<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                                        pos[level] = x;<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>                                        printBlocks(out, newlead, level + 1, pos);<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>                                        if (end &lt;= level + 1) {<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>                                                out.append(SEPARATOR + NEWLINE);<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>                                        } else {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                                                out.append(SEPARATOR + NEWLINE + NEWLINE);<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                                        }<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>                                }<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                        } else {<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>                                final int excess = length - MAX_SUBBLOCKS;<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                                int xmax = (length - excess) / 2;<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                                for (int x = 1; x &lt; xmax; x++) {<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                                        pos[level] = x;<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                                        printBlocks(out, newlead, level + 1, pos);<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                                        if (end &lt;= level + 1) {<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                                                out.append(SEPARATOR + NEWLINE);<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                                        } else {<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                                                out.append(SEPARATOR + NEWLINE + NEWLINE);<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                                        }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                                }<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                                out.append(newlead);<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                                out.append(ELLIPSIS + SEPARATOR + NEWLINE);<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                xmax = (length + excess) / 2;<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                                for (int x = xmax; x &lt; length - 1; x++) {<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                                        pos[level] = x;<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                                        printBlocks(out, newlead, level + 1, pos);<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                                        if (end &lt;= level + 1) {<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                                                out.append(SEPARATOR + NEWLINE);<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                                        } else {<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                                                out.append(SEPARATOR + NEWLINE + NEWLINE);<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>                        }<a name="line.1243"></a>
<span class="sourceLineNo">1244</span><a name="line.1244"></a>
<span class="sourceLineNo">1245</span>                        // last sub-block<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>                        pos[level] = length - 1;<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>                        printBlocks(out, newlead, level + 1, pos);<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                        out.append(BLOCK_CLOSE);<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                } else {<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                        out.append(makeLine(end, pos));<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                }<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>        }<a name="line.1252"></a>
<span class="sourceLineNo">1253</span><a name="line.1253"></a>
<span class="sourceLineNo">1254</span>        @Override<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>        public Dataset squeezeEnds() {<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                return squeeze(true);<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>        @Override<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>        public Dataset squeeze() {<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                return squeeze(false);<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>        }<a name="line.1262"></a>
<span class="sourceLineNo">1263</span><a name="line.1263"></a>
<span class="sourceLineNo">1264</span>        @Override<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>        public Dataset squeeze(boolean onlyFromEnds) {<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>                final int[] tshape = ShapeUtils.squeezeShape(shape, onlyFromEnds);<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>                final int[] oshape = shape;<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>                if (stride == null) {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>                        shape = tshape;<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>                } else {<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>                        int rank = shape.length;<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>                        int trank = tshape.length;<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>                        if (trank &lt; rank) {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>                                int[] tstride = new int[tshape.length];<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>                                if (onlyFromEnds) {<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>                                        for (int i = 0; i &lt; rank; i++) {<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>                                                if (shape[i] != 1) {<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>                                                        for (int k = 0; k &lt; trank; k++) {<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>                                                                tstride[k] = stride[i++];<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>                                                        }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>                                                        break;<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>                                                }<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>                                        }<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>                                } else {<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>                                        int t = 0;<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>                                        for (int i = 0; i &lt; rank; i++) {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                                                if (shape[i] != 1) {<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                                                        tstride[t++] = stride[i];<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                                                }<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                                        }<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                                }<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                                shape = tshape;<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>                                stride = tstride;<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                        }<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                }<a name="line.1295"></a>
<span class="sourceLineNo">1296</span><a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                setDirty();<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                reshapeMetadata(oshape, shape);<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                return this;<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>        }<a name="line.1300"></a>
<span class="sourceLineNo">1301</span><a name="line.1301"></a>
<span class="sourceLineNo">1302</span>        @Override<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>        public boolean isCompatibleWith(final ILazyDataset g) {<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>                return ShapeUtils.areShapesCompatible(shape, g.getShape());<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>        }<a name="line.1305"></a>
<span class="sourceLineNo">1306</span><a name="line.1306"></a>
<span class="sourceLineNo">1307</span>        @Override<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>        public void checkCompatibility(final ILazyDataset g) throws IllegalArgumentException {<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                ShapeUtils.checkCompatibility(this, g);<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>        }<a name="line.1310"></a>
<span class="sourceLineNo">1311</span><a name="line.1311"></a>
<span class="sourceLineNo">1312</span>        @Override<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>        public Dataset reshape(final int... shape) {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                Dataset a;<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>                try {<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>                        a = getView(true);<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>                        a.setShape(shape);<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>                } catch (IllegalArgumentException e) {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                        a = clone();<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>                        a.setShape(shape);<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                }<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                return a;<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>        }<a name="line.1323"></a>
<span class="sourceLineNo">1324</span><a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        /**<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>         * @param start<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>         * @param stop<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>         * @param step<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>         * @return number of steps to take<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>         */<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>        protected static int calcSteps(final double start, final double stop, final double step) {<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>                return Math.max(0, (int) Math.ceil((stop - start) / step));<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>        }<a name="line.1333"></a>
<span class="sourceLineNo">1334</span><a name="line.1334"></a>
<span class="sourceLineNo">1335</span>        @Override<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>        public boolean isComplex() {<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>                int type = getDType();<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>                return type == COMPLEX64 || type == COMPLEX128;<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>        }<a name="line.1339"></a>
<span class="sourceLineNo">1340</span><a name="line.1340"></a>
<span class="sourceLineNo">1341</span>        @Override<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>        public Dataset getRealPart() {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>                return this;<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        }<a name="line.1344"></a>
<span class="sourceLineNo">1345</span><a name="line.1345"></a>
<span class="sourceLineNo">1346</span>        @Override<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>        public Dataset getRealView() {<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>                return getView(true);<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>        }<a name="line.1349"></a>
<span class="sourceLineNo">1350</span><a name="line.1350"></a>
<span class="sourceLineNo">1351</span>        @Override<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>        public Dataset getSlice(final int[] start, final int[] stop, final int[] step) {<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>                return getSlice(new SliceND(shape, start, stop, step));<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>        @Override<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>        public Dataset getSlice(Slice... slice) {<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>                return getSlice(new SliceND(shape, slice));<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>        }<a name="line.1359"></a>
<span class="sourceLineNo">1360</span><a name="line.1360"></a>
<span class="sourceLineNo">1361</span>        @Override<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        public Dataset getSlice(IMonitor monitor, Slice... slice) {<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>                return getSlice(slice);<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>        }<a name="line.1364"></a>
<span class="sourceLineNo">1365</span><a name="line.1365"></a>
<span class="sourceLineNo">1366</span>        @Override<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>        public Dataset getSlice(IMonitor monitor, SliceND slice) {<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>                return getSlice(slice);<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>        }<a name="line.1369"></a>
<span class="sourceLineNo">1370</span><a name="line.1370"></a>
<span class="sourceLineNo">1371</span>        @Override<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        public Dataset getSlice(IMonitor monitor, int[] start, int[] stop, int[] step) {<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>                return getSlice(start, stop, step);<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>        }<a name="line.1374"></a>
<span class="sourceLineNo">1375</span><a name="line.1375"></a>
<span class="sourceLineNo">1376</span>        /**<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>         * Get a slice of the dataset. The returned dataset is a copied selection of items<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>         * @param slice<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>         * @return The dataset of the sliced data<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>         */<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>        @Override<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>        public Dataset getSlice(final SliceND slice) {<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                SliceIterator it = (SliceIterator) getSliceIterator(slice);<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                AbstractDataset s = getSlice(it);<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>                s.metadata = copyMetadata();<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                s.setDirty();<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                s.sliceMetadata(true, slice);<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                return s;<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>        }<a name="line.1389"></a>
<span class="sourceLineNo">1390</span><a name="line.1390"></a>
<span class="sourceLineNo">1391</span>        /**<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>         * Get a slice of the dataset. The returned dataset is a copied selection of items<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>         * <a name="line.1393"></a>
<span class="sourceLineNo">1394</span>         * @param iterator Slice iterator<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>         * @return The dataset of the sliced data<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>         */<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>        abstract public AbstractDataset getSlice(final SliceIterator iterator);<a name="line.1397"></a>
<span class="sourceLineNo">1398</span><a name="line.1398"></a>
<span class="sourceLineNo">1399</span>        @Override<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>        public Dataset setSlice(final Object obj, final SliceND slice) {<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>                Dataset ds;<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>                if (obj instanceof Dataset) {<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>                        ds = (Dataset) obj;<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>                } else if (obj instanceof IDataset) {<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>                        ds = DatasetUtils.convertToDataset((IDataset) obj);<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>                } else {<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                        Class&lt;? extends Dataset&gt; dClass = getClass();<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                        if (!BooleanDataset.class.equals(dClass)) {<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>                                dClass = DTypeUtils.getLargestDataset(dClass);<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>                        }<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                        ds = DatasetFactory.createFromObject(getElementsPerItem(), dClass, obj);<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                }<a name="line.1412"></a>
<span class="sourceLineNo">1413</span><a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                return setSlicedView(getSliceView(slice), ds);<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>        }<a name="line.1415"></a>
<span class="sourceLineNo">1416</span><a name="line.1416"></a>
<span class="sourceLineNo">1417</span>        @Override<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>        public Dataset setSlice(final Object obj, final int[] start, final int[] stop, final int[] step) {<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                return setSlice(obj, new SliceND(shape, start, stop, step));<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>        }<a name="line.1420"></a>
<span class="sourceLineNo">1421</span><a name="line.1421"></a>
<span class="sourceLineNo">1422</span>        /**<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>         * Set a view of current dataset to given dataset with broadcasting<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>         * @param view<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>         * @param d<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>         * @return this dataset<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>         */<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>        abstract Dataset setSlicedView(Dataset view, Dataset d);<a name="line.1428"></a>
<span class="sourceLineNo">1429</span><a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        @Override<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>        public Dataset setSlice(Object obj, Slice... slice) {<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>                if (slice == null || slice.length == 0) {<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>                        return setSlice(obj, new SliceND(shape));<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>                }<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>                return setSlice(obj, new SliceND(shape, slice));<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
<span class="sourceLineNo">1437</span><a name="line.1437"></a>
<span class="sourceLineNo">1438</span>        @Override<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>        public boolean all() {<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>                return Comparisons.allTrue(this);<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
<span class="sourceLineNo">1442</span><a name="line.1442"></a>
<span class="sourceLineNo">1443</span>        @Override<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>        public BooleanDataset all(final int axis) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>                return Comparisons.allTrue(this, axis);<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        }<a name="line.1446"></a>
<span class="sourceLineNo">1447</span><a name="line.1447"></a>
<span class="sourceLineNo">1448</span>        @Override<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>        public boolean any() {<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>                return Comparisons.anyTrue(this);<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>        }<a name="line.1451"></a>
<span class="sourceLineNo">1452</span><a name="line.1452"></a>
<span class="sourceLineNo">1453</span>        @Override<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>        public BooleanDataset any(final int axis) {<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>                return Comparisons.anyTrue(this, axis);<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
<span class="sourceLineNo">1457</span><a name="line.1457"></a>
<span class="sourceLineNo">1458</span>        @Override<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>        public Dataset ifloorDivide(final Object o) {<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>                return idivide(o).ifloor();<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>        }<a name="line.1461"></a>
<span class="sourceLineNo">1462</span><a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        @Override<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>        public double residual(final Object o) {<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>                return residual(o, null, false);<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>        }<a name="line.1466"></a>
<span class="sourceLineNo">1467</span><a name="line.1467"></a>
<span class="sourceLineNo">1468</span>        @Override<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>        public double residual(final Object o, boolean ignoreNaNs) {<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>                return residual(o, null, ignoreNaNs);<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>        }<a name="line.1471"></a>
<span class="sourceLineNo">1472</span><a name="line.1472"></a>
<span class="sourceLineNo">1473</span>        /**<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>         * @since 2.0<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>         */<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>        @SuppressWarnings("unchecked")<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>        protected StatisticsMetadata&lt;Number&gt; getStats() {<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                StatisticsMetadata&lt;Number&gt; md = getFirstMetadata(StatisticsMetadata.class);<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>                if (md == null || md.isDirty(this)) {<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>                        md = new StatisticsMetadataImpl&lt;Number&gt;();<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>                        md.initialize(this);<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>                        setMetadata(md);<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>                }<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>                return md;<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>        }<a name="line.1485"></a>
<span class="sourceLineNo">1486</span><a name="line.1486"></a>
<span class="sourceLineNo">1487</span>        /**<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>         * @since 2.0<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>         */<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>        @SuppressWarnings("unchecked")<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>        protected StatisticsMetadata&lt;String&gt; getStringStats() {<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>                StatisticsMetadata&lt;String&gt; md = getFirstMetadata(StatisticsMetadata.class);<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>                if (md == null || md.isDirty(this)) {<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>                        md = new StatisticsMetadataImpl&lt;String&gt;();<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>                        md.initialize(this);<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>                        setMetadata(md);<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>                }<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>                return md;<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>        }<a name="line.1499"></a>
<span class="sourceLineNo">1500</span><a name="line.1500"></a>
<span class="sourceLineNo">1501</span>        @Override<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>        public Number max(boolean... ignoreInvalids) {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>                return getStats().getMaximum(ignoreInvalids);<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
<span class="sourceLineNo">1505</span><a name="line.1505"></a>
<span class="sourceLineNo">1506</span>        @Override<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>        public Dataset max(int axis, boolean... ignoreInvalids) {<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>                return getStats().getMaximum(axis, ignoreInvalids);<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
<span class="sourceLineNo">1510</span><a name="line.1510"></a>
<span class="sourceLineNo">1511</span>        @Override<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>        public Dataset max(int[] axes, boolean... ignoreInvalids) {<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>                return getStats().getMaximum(axes, ignoreInvalids);<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>        }<a name="line.1514"></a>
<span class="sourceLineNo">1515</span><a name="line.1515"></a>
<span class="sourceLineNo">1516</span>        @Override<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>        public Number min(boolean... ignoreInvalids) {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                return getStats().getMinimum(ignoreInvalids);<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>        }<a name="line.1519"></a>
<span class="sourceLineNo">1520</span><a name="line.1520"></a>
<span class="sourceLineNo">1521</span>        @Override<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>        public Dataset min(int axis, boolean... ignoreInvalids) {<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                return getStats().getMinimum(axis, ignoreInvalids);<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>        }<a name="line.1524"></a>
<span class="sourceLineNo">1525</span><a name="line.1525"></a>
<span class="sourceLineNo">1526</span>        @Override<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>        public Dataset min(int[] axes, boolean... ignoreInvalids) {<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>                return getStats().getMinimum(axes, ignoreInvalids);<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>        }<a name="line.1529"></a>
<span class="sourceLineNo">1530</span><a name="line.1530"></a>
<span class="sourceLineNo">1531</span>        @Override<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>        public int argMax(boolean... ignoreInvalids) {<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>                return getFlat1DIndex(maxPos(ignoreInvalids));<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>        }<a name="line.1534"></a>
<span class="sourceLineNo">1535</span><a name="line.1535"></a>
<span class="sourceLineNo">1536</span>        /**<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>         * @since 2.0<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>         */<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>        @Override<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>        public IntegerDataset argMax(int axis, boolean... ignoreInvalids) {<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>                return (IntegerDataset) getStats().getArgMaximum(axis, ignoreInvalids);<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>        }<a name="line.1542"></a>
<span class="sourceLineNo">1543</span><a name="line.1543"></a>
<span class="sourceLineNo">1544</span>        @Override<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>        public int argMin(boolean... ignoreInvalids) {<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>                return getFlat1DIndex(minPos(ignoreInvalids));<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>        }<a name="line.1547"></a>
<span class="sourceLineNo">1548</span><a name="line.1548"></a>
<span class="sourceLineNo">1549</span>        /**<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>         * @since 2.0<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>         */<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>        @Override<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>        public IntegerDataset argMin(int axis, boolean... ignoreInvalids) {<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                return (IntegerDataset) getStats().getArgMinimum(axis, ignoreInvalids);<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
<span class="sourceLineNo">1556</span><a name="line.1556"></a>
<span class="sourceLineNo">1557</span>        @Override<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>        public Number peakToPeak(boolean... ignoreInvalids) {<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>                return InterfaceUtils.fromDoubleToBiggestNumber(getClass(), max(ignoreInvalids).doubleValue() - min(ignoreInvalids).doubleValue());<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>        }<a name="line.1560"></a>
<span class="sourceLineNo">1561</span><a name="line.1561"></a>
<span class="sourceLineNo">1562</span>        @Override<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>        public Dataset peakToPeak(int axis,  boolean... ignoreInvalids) {<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>                return Maths.subtract(max(axis, ignoreInvalids), min(axis, ignoreInvalids));<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>        }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span><a name="line.1566"></a>
<span class="sourceLineNo">1567</span>        @Override<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>        public Dataset peakToPeak(int[] axes,  boolean... ignoreInvalids) {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>                return Maths.subtract(max(axes, ignoreInvalids), min(axes, ignoreInvalids));<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>        }<a name="line.1570"></a>
<span class="sourceLineNo">1571</span><a name="line.1571"></a>
<span class="sourceLineNo">1572</span>        @Override<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>        public long count(boolean... ignoreInvalids) {<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>                return getStats().getCount(ignoreInvalids);<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>        }<a name="line.1575"></a>
<span class="sourceLineNo">1576</span><a name="line.1576"></a>
<span class="sourceLineNo">1577</span>        @Override<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>        public Dataset count(int axis, boolean... ignoreInvalids) {<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>                return getStats().getCount(axis, ignoreInvalids);<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>        }<a name="line.1580"></a>
<span class="sourceLineNo">1581</span><a name="line.1581"></a>
<span class="sourceLineNo">1582</span>        @Override<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>        public Dataset count(int[] axes, boolean... ignoreInvalids) {<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>                return getStats().getCount(axes, ignoreInvalids);<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
<span class="sourceLineNo">1586</span><a name="line.1586"></a>
<span class="sourceLineNo">1587</span>        @Override<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>        public Object sum(boolean... ignoreInvalids) {<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>                return InterfaceUtils.toBiggestNumber(getClass(), getStats().getSum(ignoreInvalids));<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
<span class="sourceLineNo">1591</span><a name="line.1591"></a>
<span class="sourceLineNo">1592</span>        @Override<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>        public Dataset sum(int axis, boolean... ignoreInvalids) {<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>                return getStats().getSum(axis, ignoreInvalids);<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>        }<a name="line.1595"></a>
<span class="sourceLineNo">1596</span><a name="line.1596"></a>
<span class="sourceLineNo">1597</span>        @Override<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>        public Dataset sum(int[] axes, boolean... ignoreInvalids) {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>                return getStats().getSum(axes, ignoreInvalids);<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>        }<a name="line.1600"></a>
<span class="sourceLineNo">1601</span><a name="line.1601"></a>
<span class="sourceLineNo">1602</span>        @Override<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>        public Object product(boolean... ignoreInvalids) {<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>                return Stats.product(this, ignoreInvalids);<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>        }<a name="line.1605"></a>
<span class="sourceLineNo">1606</span><a name="line.1606"></a>
<span class="sourceLineNo">1607</span>        @Override<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>        public Dataset product(int axis, boolean... ignoreInvalids) {<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>                return Stats.product(this, axis, ignoreInvalids);<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        }<a name="line.1610"></a>
<span class="sourceLineNo">1611</span><a name="line.1611"></a>
<span class="sourceLineNo">1612</span>        @Override<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>        public Dataset product(int[] axes, boolean... ignoreInvalids) {<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>                return Stats.product(this, axes, ignoreInvalids);<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>        }<a name="line.1615"></a>
<span class="sourceLineNo">1616</span><a name="line.1616"></a>
<span class="sourceLineNo">1617</span>        @Override<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>        public Object mean(boolean... ignoreInvalids) {<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                return getStats().getMean(ignoreInvalids);<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>        }<a name="line.1620"></a>
<span class="sourceLineNo">1621</span><a name="line.1621"></a>
<span class="sourceLineNo">1622</span>        @Override<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>        public Dataset mean(int axis, boolean... ignoreInvalids) {<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>                return getStats().getMean(axis, ignoreInvalids);<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>        }<a name="line.1625"></a>
<span class="sourceLineNo">1626</span><a name="line.1626"></a>
<span class="sourceLineNo">1627</span>        @Override<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>        public Dataset mean(int[] axes, boolean... ignoreInvalids) {<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                return getStats().getMean(axes, ignoreInvalids);<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>        }<a name="line.1630"></a>
<span class="sourceLineNo">1631</span><a name="line.1631"></a>
<span class="sourceLineNo">1632</span>        @Override<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>        public double variance() {<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>                return variance(false);<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
<span class="sourceLineNo">1636</span><a name="line.1636"></a>
<span class="sourceLineNo">1637</span>        @Override<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>        public double variance(boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                return getStats().getVariance(isWholePopulation, ignoreInvalids);<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>        }<a name="line.1640"></a>
<span class="sourceLineNo">1641</span><a name="line.1641"></a>
<span class="sourceLineNo">1642</span>        @Override<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>        public Dataset variance(int axis) {<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                return getStats().getVariance(axis, false);<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>        }<a name="line.1645"></a>
<span class="sourceLineNo">1646</span><a name="line.1646"></a>
<span class="sourceLineNo">1647</span>        @Override<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>        public Dataset variance(int[] axes) {<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                return getStats().getVariance(axes, false);<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>        }<a name="line.1650"></a>
<span class="sourceLineNo">1651</span><a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        @Override<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>        public Dataset variance(int axis, boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                return getStats().getVariance(axis, isWholePopulation, ignoreInvalids);<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>        }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span><a name="line.1656"></a>
<span class="sourceLineNo">1657</span>        @Override<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>        public Dataset variance(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>                return getStats().getVariance(axes, isWholePopulation, ignoreInvalids);<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>        }<a name="line.1660"></a>
<span class="sourceLineNo">1661</span><a name="line.1661"></a>
<span class="sourceLineNo">1662</span>        @Override<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>        public double stdDeviation() {<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>                return Math.sqrt(variance());<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>        }<a name="line.1665"></a>
<span class="sourceLineNo">1666</span><a name="line.1666"></a>
<span class="sourceLineNo">1667</span>        @Override<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        public double stdDeviation(boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>                return Math.sqrt(variance(isWholePopulation, ignoreInvalids));<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>        }<a name="line.1670"></a>
<span class="sourceLineNo">1671</span><a name="line.1671"></a>
<span class="sourceLineNo">1672</span>        @Override<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>        public Dataset stdDeviation(int axis) {<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>                return Maths.sqrt(variance(axis, false));<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>        }<a name="line.1675"></a>
<span class="sourceLineNo">1676</span><a name="line.1676"></a>
<span class="sourceLineNo">1677</span>        @Override<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>        public Dataset stdDeviation(int[] axes) {<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>                return Maths.sqrt(variance(axes, false));<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>        }<a name="line.1680"></a>
<span class="sourceLineNo">1681</span><a name="line.1681"></a>
<span class="sourceLineNo">1682</span>        @Override<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>        public Dataset stdDeviation(int axis, boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>                return Maths.sqrt(variance(axis, isWholePopulation, ignoreInvalids));<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>        }<a name="line.1685"></a>
<span class="sourceLineNo">1686</span><a name="line.1686"></a>
<span class="sourceLineNo">1687</span>        @Override<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        public Dataset stdDeviation(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids) {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>                return Maths.sqrt(variance(axes, isWholePopulation, ignoreInvalids));<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>        }<a name="line.1690"></a>
<span class="sourceLineNo">1691</span><a name="line.1691"></a>
<span class="sourceLineNo">1692</span>        @Override<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>        public double rootMeanSquare(boolean... ignoreInvalids) {<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>                StatisticsMetadata&lt;Number&gt; stats = getStats();<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>                final double mean = stats.getMean(ignoreInvalids).doubleValue();<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>                final double var = stats.getVariance(true, ignoreInvalids);<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>                return Math.sqrt(var + mean * mean);<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>        }<a name="line.1698"></a>
<span class="sourceLineNo">1699</span><a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        @Override<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>        public Dataset rootMeanSquare(int axis, boolean... ignoreInvalids) {<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>                StatisticsMetadata&lt;Number&gt; stats = getStats();<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>                Dataset v = stats.getVariance(axis, true, ignoreInvalids);<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>                Dataset m = stats.getMean(axis, ignoreInvalids);<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>                Dataset result = Maths.multiply(m, m);<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>                return Maths.sqrt(result.iadd(v));<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>        }<a name="line.1707"></a>
<span class="sourceLineNo">1708</span><a name="line.1708"></a>
<span class="sourceLineNo">1709</span>        @Override<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>        public Dataset rootMeanSquare(int[] axes, boolean... ignoreInvalids) {<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>                StatisticsMetadata&lt;Number&gt; stats = getStats();<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>                Dataset v = stats.getVariance(axes, true, ignoreInvalids);<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>                Dataset m = stats.getMean(axes, ignoreInvalids);<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>                Dataset result = Maths.multiply(m, m);<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>                return Maths.sqrt(result.iadd(v));<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        }<a name="line.1716"></a>
<span class="sourceLineNo">1717</span><a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        /**<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>         * Set item from compatible dataset in a direct and speedy way. Remember to setDirty afterwards.<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>         * <a name="line.1720"></a>
<span class="sourceLineNo">1721</span>         * @param dindex<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>         * @param sindex<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>         * @param src<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>         *            is the source data buffer<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>         */<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>        protected abstract void setItemDirect(final int dindex, final int sindex, final Object src);<a name="line.1726"></a>
<span class="sourceLineNo">1727</span><a name="line.1727"></a>
<span class="sourceLineNo">1728</span>        /**<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>         * @return error broadcasted to current shape<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>         */<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>        private Dataset getBroadcastedInternalError() {<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>                if (shape == null) {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>                        throw new IllegalArgumentException("Cannot get error for null dataset");<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>                }<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>                ILazyDataset led = super.getErrors();<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>                if (led == null)<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>                        return null;<a name="line.1737"></a>
<span class="sourceLineNo">1738</span><a name="line.1738"></a>
<span class="sourceLineNo">1739</span>                Dataset ed = null;<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>                try {<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>                        ed = DatasetUtils.sliceAndConvertLazyDataset(led);<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>                } catch (DatasetException e) {<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>                        logger.error("Could not get data from lazy dataset", e);<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>                }<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>                if (led != ed) {<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>                        setErrors(ed); // set back<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>                }<a name="line.1747"></a>
<span class="sourceLineNo">1748</span><a name="line.1748"></a>
<span class="sourceLineNo">1749</span>                return ed.getBroadcastView(shape);<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>        }<a name="line.1750"></a>
<span class="sourceLineNo">1751</span><a name="line.1751"></a>
<span class="sourceLineNo">1752</span>        @Override<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>        public Dataset getErrors() {<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>                if (ed == null)<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>                        return null;<a name="line.1756"></a>
<span class="sourceLineNo">1757</span><a name="line.1757"></a>
<span class="sourceLineNo">1758</span>                return ed;<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>        }<a name="line.1759"></a>
<span class="sourceLineNo">1760</span><a name="line.1760"></a>
<span class="sourceLineNo">1761</span>        @Override<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>        public double getError() {<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>                if (ed == null)<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>                        return 0;<a name="line.1765"></a>
<span class="sourceLineNo">1766</span><a name="line.1766"></a>
<span class="sourceLineNo">1767</span>                return ed.getDouble();<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>        }<a name="line.1768"></a>
<span class="sourceLineNo">1769</span><a name="line.1769"></a>
<span class="sourceLineNo">1770</span>        @Override<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>        public double getError(final int i) {<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>                if (ed == null)<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>                        return 0;<a name="line.1774"></a>
<span class="sourceLineNo">1775</span><a name="line.1775"></a>
<span class="sourceLineNo">1776</span>                return ed.getDouble(i);<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>        }<a name="line.1777"></a>
<span class="sourceLineNo">1778</span><a name="line.1778"></a>
<span class="sourceLineNo">1779</span>        @Override<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>        public double getError(final int i, final int j) {<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>                if (ed == null)<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                        return 0;<a name="line.1783"></a>
<span class="sourceLineNo">1784</span><a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                return ed.getDouble(i, j);<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>        }<a name="line.1786"></a>
<span class="sourceLineNo">1787</span><a name="line.1787"></a>
<span class="sourceLineNo">1788</span>        @Override<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>        public double getError(int... pos) {<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>                if (ed == null)<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>                        return 0;<a name="line.1792"></a>
<span class="sourceLineNo">1793</span><a name="line.1793"></a>
<span class="sourceLineNo">1794</span>                return ed.getDouble(pos);<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>        }<a name="line.1795"></a>
<span class="sourceLineNo">1796</span><a name="line.1796"></a>
<span class="sourceLineNo">1797</span>        @Override<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>        public double[] getErrorArray(final int i) {<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>                if (ed == null)<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>                        return null;<a name="line.1801"></a>
<span class="sourceLineNo">1802</span><a name="line.1802"></a>
<span class="sourceLineNo">1803</span>                return new double[] {getError(i)};<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>        }<a name="line.1804"></a>
<span class="sourceLineNo">1805</span><a name="line.1805"></a>
<span class="sourceLineNo">1806</span>        @Override<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>        public double[] getErrorArray(final int i, final int j) {<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                if (ed == null)<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>                        return null;<a name="line.1810"></a>
<span class="sourceLineNo">1811</span><a name="line.1811"></a>
<span class="sourceLineNo">1812</span>                return new double[] {getError(i, j)};<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>        }<a name="line.1813"></a>
<span class="sourceLineNo">1814</span><a name="line.1814"></a>
<span class="sourceLineNo">1815</span>        @Override<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>        public double[] getErrorArray(int... pos) {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                Dataset ed = getBroadcastedInternalError();<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>                if (ed == null)<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>                        return null;<a name="line.1819"></a>
<span class="sourceLineNo">1820</span><a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                return new double[] {getError(pos)};<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>        }<a name="line.1822"></a>
<span class="sourceLineNo">1823</span><a name="line.1823"></a>
<span class="sourceLineNo">1824</span>        protected Dataset getInternalSquaredError() {<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                Dataset sed = getErrorBuffer().getBroadcastView(shape);<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                return sed;<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>        }<a name="line.1827"></a>
<span class="sourceLineNo">1828</span><a name="line.1828"></a>
<span class="sourceLineNo">1829</span>        @Override<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>        public Dataset getErrorBuffer() {<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>                ErrorMetadata emd = getErrorMetadata();<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>                if (emd == null)<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>                        return null;<a name="line.1833"></a>
<span class="sourceLineNo">1834</span><a name="line.1834"></a>
<span class="sourceLineNo">1835</span>                if (!(emd instanceof ErrorMetadataImpl)) {<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>                        ILazyDataset led = emd.getError();<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>                        Dataset ed;<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>                        try {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>                                ed = DatasetUtils.sliceAndConvertLazyDataset(led);<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>                                emd = MetadataFactory.createMetadata(ErrorMetadata.class);<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>                                setMetadata(emd);<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>                                emd.setError(ed);<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>                        } catch (MetadataException me) {<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>                                logger.error("Could not create metadata", me);<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>                        } catch (DatasetException e) {<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>                                logger.error("Could not get data from lazy dataset", e);<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>                        }<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>                }<a name="line.1848"></a>
<span class="sourceLineNo">1849</span><a name="line.1849"></a>
<span class="sourceLineNo">1850</span>                return ((ErrorMetadataImpl) emd).getSquaredError();<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>        }<a name="line.1851"></a>
<span class="sourceLineNo">1852</span><a name="line.1852"></a>
<span class="sourceLineNo">1853</span>        /**<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>         * Set a copy of the buffer that backs the (squared) error data<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>         * @param buffer can be null, anything that can be used to create a DoubleDataset or CompoundDoubleDataset<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>         */<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>        @Override<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>        public void setErrorBuffer(Serializable buffer) {<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>                if (shape == null) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>                        throw new IllegalArgumentException("Cannot set error buffer for null dataset");<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>                }<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>                if (buffer == null) {<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>                        clearMetadata(ErrorMetadata.class);<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>                        return;<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>                }<a name="line.1865"></a>
<span class="sourceLineNo">1866</span><a name="line.1866"></a>
<span class="sourceLineNo">1867</span>                IDataset d = (IDataset) createFromSerializable(buffer, false);<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>                ErrorMetadata emd = getErrorMetadata();<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                if (!(emd instanceof ErrorMetadataImpl)) {<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>                        try {<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>                                emd = MetadataFactory.createMetadata(ErrorMetadata.class);<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                                setMetadata(emd);<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                        } catch (MetadataException me) {<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                                logger.error("Could not create metadata", me);<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                        }<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                }<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                ((ErrorMetadataImpl) emd).setSquaredError(d);<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>        }<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>}<a name="line.1879"></a>




























































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