<!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.util.ArrayList;<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.apache.commons.math3.util.MathArrays;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.eclipse.january.DatasetException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.slf4j.Logger;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.slf4j.LoggerFactory;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
<span class="sourceLineNo">027</span> * Utilities for manipulating datasets<a name="line.27"></a>
<span class="sourceLineNo">028</span> */<a name="line.28"></a>
<span class="sourceLineNo">029</span>@SuppressWarnings("unchecked")<a name="line.29"></a>
<span class="sourceLineNo">030</span>public class DatasetUtils {<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>        /**<a name="line.32"></a>
<span class="sourceLineNo">033</span>         * Setup the logging facilities<a name="line.33"></a>
<span class="sourceLineNo">034</span>         */<a name="line.34"></a>
<span class="sourceLineNo">035</span>        transient protected static final Logger utilsLogger = LoggerFactory.getLogger(DatasetUtils.class);<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>        /**<a name="line.37"></a>
<span class="sourceLineNo">038</span>         * Append copy of dataset with another dataset along n-th axis<a name="line.38"></a>
<span class="sourceLineNo">039</span>         * <a name="line.39"></a>
<span class="sourceLineNo">040</span>         * @param a<a name="line.40"></a>
<span class="sourceLineNo">041</span>         * @param b<a name="line.41"></a>
<span class="sourceLineNo">042</span>         * @param axis<a name="line.42"></a>
<span class="sourceLineNo">043</span>         *            number of axis (negative number counts from last)<a name="line.43"></a>
<span class="sourceLineNo">044</span>         * @return appended dataset<a name="line.44"></a>
<span class="sourceLineNo">045</span>         */<a name="line.45"></a>
<span class="sourceLineNo">046</span>        public static Dataset append(IDataset a, IDataset b, int axis) {<a name="line.46"></a>
<span class="sourceLineNo">047</span>                final int[] ashape = a.getShape();<a name="line.47"></a>
<span class="sourceLineNo">048</span>                final int rank = ashape.length;<a name="line.48"></a>
<span class="sourceLineNo">049</span>                final int[] bshape = b.getShape();<a name="line.49"></a>
<span class="sourceLineNo">050</span>                if (rank != bshape.length) {<a name="line.50"></a>
<span class="sourceLineNo">051</span>                        throw new IllegalArgumentException("Incompatible number of dimensions");<a name="line.51"></a>
<span class="sourceLineNo">052</span>                }<a name="line.52"></a>
<span class="sourceLineNo">053</span>                if (axis &gt;= rank) {<a name="line.53"></a>
<span class="sourceLineNo">054</span>                        throw new IllegalArgumentException("Axis specified exceeds array dimensions");<a name="line.54"></a>
<span class="sourceLineNo">055</span>                } else if (axis &gt; -rank) {<a name="line.55"></a>
<span class="sourceLineNo">056</span>                        if (axis &lt; 0)<a name="line.56"></a>
<span class="sourceLineNo">057</span>                                axis += rank;<a name="line.57"></a>
<span class="sourceLineNo">058</span>                } else {<a name="line.58"></a>
<span class="sourceLineNo">059</span>                        throw new IllegalArgumentException("Axis specified is less than " + (-rank));<a name="line.59"></a>
<span class="sourceLineNo">060</span>                }<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.62"></a>
<span class="sourceLineNo">063</span>                        if (i != axis &amp;&amp; ashape[i] != bshape[i]) {<a name="line.63"></a>
<span class="sourceLineNo">064</span>                                throw new IllegalArgumentException("Incompatible dimensions");<a name="line.64"></a>
<span class="sourceLineNo">065</span>                        }<a name="line.65"></a>
<span class="sourceLineNo">066</span>                }<a name="line.66"></a>
<span class="sourceLineNo">067</span>                final int[] nshape = new int[rank];<a name="line.67"></a>
<span class="sourceLineNo">068</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.68"></a>
<span class="sourceLineNo">069</span>                        nshape[i] = ashape[i];<a name="line.69"></a>
<span class="sourceLineNo">070</span>                }<a name="line.70"></a>
<span class="sourceLineNo">071</span>                nshape[axis] += bshape[axis];<a name="line.71"></a>
<span class="sourceLineNo">072</span>                final int ot = DTypeUtils.getDType(b);<a name="line.72"></a>
<span class="sourceLineNo">073</span>                final int dt = DTypeUtils.getDType(a);<a name="line.73"></a>
<span class="sourceLineNo">074</span>                @SuppressWarnings("deprecation")<a name="line.74"></a>
<span class="sourceLineNo">075</span>                Dataset ds = DatasetFactory.zeros(a.getElementsPerItem(), nshape, dt &gt; ot ? dt : ot);<a name="line.75"></a>
<span class="sourceLineNo">076</span>                IndexIterator iter = ds.getIterator(true);<a name="line.76"></a>
<span class="sourceLineNo">077</span>                int[] pos = iter.getPos();<a name="line.77"></a>
<span class="sourceLineNo">078</span>                while (iter.hasNext()) {<a name="line.78"></a>
<span class="sourceLineNo">079</span>                        int d = ashape[axis];<a name="line.79"></a>
<span class="sourceLineNo">080</span>                        if (pos[axis] &lt; d) {<a name="line.80"></a>
<span class="sourceLineNo">081</span>                                ds.setObjectAbs(iter.index, a.getObject(pos));<a name="line.81"></a>
<span class="sourceLineNo">082</span>                        } else {<a name="line.82"></a>
<span class="sourceLineNo">083</span>                                pos[axis] -= d;<a name="line.83"></a>
<span class="sourceLineNo">084</span>                                ds.setObjectAbs(iter.index, b.getObject(pos));<a name="line.84"></a>
<span class="sourceLineNo">085</span>                                pos[axis] += d;<a name="line.85"></a>
<span class="sourceLineNo">086</span>                        }<a name="line.86"></a>
<span class="sourceLineNo">087</span>                }<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>                return ds;<a name="line.89"></a>
<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>        /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>         * Changes specific items of dataset by replacing them with other array<a name="line.93"></a>
<span class="sourceLineNo">094</span>         * @param a<a name="line.94"></a>
<span class="sourceLineNo">095</span>         * @param indices dataset interpreted as integers<a name="line.95"></a>
<span class="sourceLineNo">096</span>         * @param values<a name="line.96"></a>
<span class="sourceLineNo">097</span>         * @return changed dataset<a name="line.97"></a>
<span class="sourceLineNo">098</span>         */<a name="line.98"></a>
<span class="sourceLineNo">099</span>        public static &lt;T extends Dataset&gt; T put(final T a, final Dataset indices, Object values) {<a name="line.99"></a>
<span class="sourceLineNo">100</span>                IndexIterator it = indices.getIterator();<a name="line.100"></a>
<span class="sourceLineNo">101</span>                Dataset vd = DatasetFactory.createFromObject(values).flatten();<a name="line.101"></a>
<span class="sourceLineNo">102</span>                int vlen = vd.getSize();<a name="line.102"></a>
<span class="sourceLineNo">103</span>                int v = 0;<a name="line.103"></a>
<span class="sourceLineNo">104</span>                while (it.hasNext()) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>                        if (v &gt;= vlen) v -= vlen;<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>                        a.setObjectAbs((int) indices.getElementLongAbs(it.index), vd.getObjectAbs(v++));<a name="line.107"></a>
<span class="sourceLineNo">108</span>                }<a name="line.108"></a>
<span class="sourceLineNo">109</span>                return a;<a name="line.109"></a>
<span class="sourceLineNo">110</span>        }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span>        /**<a name="line.112"></a>
<span class="sourceLineNo">113</span>         * Changes specific items of dataset by replacing them with other array<a name="line.113"></a>
<span class="sourceLineNo">114</span>         * @param a<a name="line.114"></a>
<span class="sourceLineNo">115</span>         * @param indices<a name="line.115"></a>
<span class="sourceLineNo">116</span>         * @param values<a name="line.116"></a>
<span class="sourceLineNo">117</span>         * @return changed dataset<a name="line.117"></a>
<span class="sourceLineNo">118</span>         */<a name="line.118"></a>
<span class="sourceLineNo">119</span>        public static &lt;T extends Dataset&gt; T put(final T a, final int[] indices, Object values) {<a name="line.119"></a>
<span class="sourceLineNo">120</span>                int ilen = indices.length;<a name="line.120"></a>
<span class="sourceLineNo">121</span>                Dataset vd = DatasetFactory.createFromObject(values).flatten();<a name="line.121"></a>
<span class="sourceLineNo">122</span>                int vlen = vd.getSize();<a name="line.122"></a>
<span class="sourceLineNo">123</span>                for (int i = 0, v= 0; i &lt; ilen; i++) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                        if (v &gt;= vlen) v -= vlen;<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>                        a.setObjectAbs(indices[i], vd.getObjectAbs(v++));<a name="line.126"></a>
<span class="sourceLineNo">127</span>                }<a name="line.127"></a>
<span class="sourceLineNo">128</span>                return a;<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>        /**<a name="line.131"></a>
<span class="sourceLineNo">132</span>         * Take items from dataset along an axis<a name="line.132"></a>
<span class="sourceLineNo">133</span>         * @param indices dataset interpreted as integers<a name="line.133"></a>
<span class="sourceLineNo">134</span>         * @param axis if null, then use flattened view<a name="line.134"></a>
<span class="sourceLineNo">135</span>         * @return a sub-array<a name="line.135"></a>
<span class="sourceLineNo">136</span>         */<a name="line.136"></a>
<span class="sourceLineNo">137</span>        public static &lt;T extends Dataset&gt; T take(final T a, final Dataset indices, Integer axis) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                IntegerDataset indexes = (IntegerDataset) indices.flatten().cast(Dataset.INT32);<a name="line.138"></a>
<span class="sourceLineNo">139</span>                return take(a, indexes.getData(), axis);<a name="line.139"></a>
<span class="sourceLineNo">140</span>        }<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>        /**<a name="line.142"></a>
<span class="sourceLineNo">143</span>         * Take items from dataset along an axis<a name="line.143"></a>
<span class="sourceLineNo">144</span>         * @param indices<a name="line.144"></a>
<span class="sourceLineNo">145</span>         * @param axis if null, then use flattened view<a name="line.145"></a>
<span class="sourceLineNo">146</span>         * @return a sub-array<a name="line.146"></a>
<span class="sourceLineNo">147</span>         */<a name="line.147"></a>
<span class="sourceLineNo">148</span>        @SuppressWarnings("deprecation")<a name="line.148"></a>
<span class="sourceLineNo">149</span>        public static &lt;T extends Dataset&gt; T take(final T a, final int[] indices, Integer axis) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                if (indices == null || indices.length == 0) {<a name="line.150"></a>
<span class="sourceLineNo">151</span>                        utilsLogger.error("No indices given");<a name="line.151"></a>
<span class="sourceLineNo">152</span>                        throw new IllegalArgumentException("No indices given");<a name="line.152"></a>
<span class="sourceLineNo">153</span>                }<a name="line.153"></a>
<span class="sourceLineNo">154</span>                int[] ashape = a.getShape();<a name="line.154"></a>
<span class="sourceLineNo">155</span>                final int rank = ashape.length;<a name="line.155"></a>
<span class="sourceLineNo">156</span>                final int at = a.getDType();<a name="line.156"></a>
<span class="sourceLineNo">157</span>                final int ilen = indices.length;<a name="line.157"></a>
<span class="sourceLineNo">158</span>                final int is = a.getElementsPerItem();<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>                Dataset result;<a name="line.160"></a>
<span class="sourceLineNo">161</span>                if (axis == null) {<a name="line.161"></a>
<span class="sourceLineNo">162</span>                        ashape = new int[1];<a name="line.162"></a>
<span class="sourceLineNo">163</span>                        ashape[0] = ilen;<a name="line.163"></a>
<span class="sourceLineNo">164</span>                        result = DatasetFactory.zeros(is, ashape, at);<a name="line.164"></a>
<span class="sourceLineNo">165</span>                        Serializable src = a.getBuffer();<a name="line.165"></a>
<span class="sourceLineNo">166</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.166"></a>
<span class="sourceLineNo">167</span>                                ((AbstractDataset) result).setItemDirect(i, indices[i], src);<a name="line.167"></a>
<span class="sourceLineNo">168</span>                        }<a name="line.168"></a>
<span class="sourceLineNo">169</span>                } else {<a name="line.169"></a>
<span class="sourceLineNo">170</span>                        axis = a.checkAxis(axis);<a name="line.170"></a>
<span class="sourceLineNo">171</span>                        ashape[axis] = ilen;<a name="line.171"></a>
<span class="sourceLineNo">172</span>                        result = DatasetFactory.zeros(is, ashape, at);<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span>                        int[] dpos = new int[rank];<a name="line.174"></a>
<span class="sourceLineNo">175</span>                        int[] spos = new int[rank];<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        boolean[] axes = new boolean[rank];<a name="line.176"></a>
<span class="sourceLineNo">177</span>                        Arrays.fill(axes, true);<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        axes[axis] = false;<a name="line.178"></a>
<span class="sourceLineNo">179</span>                        Serializable src = a.getBuffer();<a name="line.179"></a>
<span class="sourceLineNo">180</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.180"></a>
<span class="sourceLineNo">181</span>                                spos[axis] = indices[i];<a name="line.181"></a>
<span class="sourceLineNo">182</span>                                dpos[axis] = i;<a name="line.182"></a>
<span class="sourceLineNo">183</span>                                SliceIterator siter = a.getSliceIteratorFromAxes(spos, axes);<a name="line.183"></a>
<span class="sourceLineNo">184</span>                                SliceIterator diter = result.getSliceIteratorFromAxes(dpos, axes);<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>                                while (siter.hasNext() &amp;&amp; diter.hasNext()) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>                                        ((AbstractDataset) result).setItemDirect(diter.index, siter.index, src);<a name="line.187"></a>
<span class="sourceLineNo">188</span>                                }<a name="line.188"></a>
<span class="sourceLineNo">189</span>                        }<a name="line.189"></a>
<span class="sourceLineNo">190</span>                }<a name="line.190"></a>
<span class="sourceLineNo">191</span>                result.setDirty();<a name="line.191"></a>
<span class="sourceLineNo">192</span>                return (T) result;<a name="line.192"></a>
<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>        /**<a name="line.195"></a>
<span class="sourceLineNo">196</span>         * Construct a dataset that contains the original dataset repeated the number<a name="line.196"></a>
<span class="sourceLineNo">197</span>         * of times in each axis given by corresponding entries in the reps array<a name="line.197"></a>
<span class="sourceLineNo">198</span>         *<a name="line.198"></a>
<span class="sourceLineNo">199</span>         * @param a<a name="line.199"></a>
<span class="sourceLineNo">200</span>         * @param reps <a name="line.200"></a>
<span class="sourceLineNo">201</span>         * @return tiled dataset<a name="line.201"></a>
<span class="sourceLineNo">202</span>         */<a name="line.202"></a>
<span class="sourceLineNo">203</span>        public static Dataset tile(final IDataset a, int... reps) {<a name="line.203"></a>
<span class="sourceLineNo">204</span>                int[] shape = a.getShape();<a name="line.204"></a>
<span class="sourceLineNo">205</span>                int rank = shape.length;<a name="line.205"></a>
<span class="sourceLineNo">206</span>                final int rlen = reps.length;<a name="line.206"></a>
<span class="sourceLineNo">207</span><a name="line.207"></a>
<span class="sourceLineNo">208</span>                // expand shape<a name="line.208"></a>
<span class="sourceLineNo">209</span>                if (rank &lt; rlen) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                        int[] newShape = new int[rlen];<a name="line.210"></a>
<span class="sourceLineNo">211</span>                        int extraRank = rlen - rank;<a name="line.211"></a>
<span class="sourceLineNo">212</span>                        for (int i = 0; i &lt; extraRank; i++) {<a name="line.212"></a>
<span class="sourceLineNo">213</span>                                newShape[i] = 1;<a name="line.213"></a>
<span class="sourceLineNo">214</span>                        }<a name="line.214"></a>
<span class="sourceLineNo">215</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                                newShape[i+extraRank] = shape[i];<a name="line.216"></a>
<span class="sourceLineNo">217</span>                        }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>                        shape = newShape;<a name="line.219"></a>
<span class="sourceLineNo">220</span>                        rank = rlen;<a name="line.220"></a>
<span class="sourceLineNo">221</span>                } else if (rank &gt; rlen) {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        int[] newReps = new int[rank];<a name="line.222"></a>
<span class="sourceLineNo">223</span>                        int extraRank = rank - rlen;<a name="line.223"></a>
<span class="sourceLineNo">224</span>                        for (int i = 0; i &lt; extraRank; i++) {<a name="line.224"></a>
<span class="sourceLineNo">225</span>                                newReps[i] = 1;<a name="line.225"></a>
<span class="sourceLineNo">226</span>                        }<a name="line.226"></a>
<span class="sourceLineNo">227</span>                        for (int i = 0; i &lt; rlen; i++) {<a name="line.227"></a>
<span class="sourceLineNo">228</span>                                newReps[i+extraRank] = reps[i];<a name="line.228"></a>
<span class="sourceLineNo">229</span>                        }<a name="line.229"></a>
<span class="sourceLineNo">230</span>                        reps = newReps;<a name="line.230"></a>
<span class="sourceLineNo">231</span>                }<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>                // calculate new shape<a name="line.233"></a>
<span class="sourceLineNo">234</span>                int[] newShape = new int[rank];<a name="line.234"></a>
<span class="sourceLineNo">235</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.235"></a>
<span class="sourceLineNo">236</span>                        newShape[i] = shape[i]*reps[i];<a name="line.236"></a>
<span class="sourceLineNo">237</span>                }<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>                @SuppressWarnings("deprecation")<a name="line.239"></a>
<span class="sourceLineNo">240</span>                Dataset tdata = DatasetFactory.zeros(a.getElementsPerItem(), newShape, DTypeUtils.getDType(a));<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>                // decide which way to put slices<a name="line.242"></a>
<span class="sourceLineNo">243</span>                boolean manyColumns;<a name="line.243"></a>
<span class="sourceLineNo">244</span>                if (rank == 1)<a name="line.244"></a>
<span class="sourceLineNo">245</span>                        manyColumns = true;<a name="line.245"></a>
<span class="sourceLineNo">246</span>                else<a name="line.246"></a>
<span class="sourceLineNo">247</span>                        manyColumns = shape[rank-1] &gt; 64;<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>                if (manyColumns) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                        // generate each start point and put a slice in<a name="line.250"></a>
<span class="sourceLineNo">251</span>                        IndexIterator iter = tdata.getSliceIterator(null, null, shape);<a name="line.251"></a>
<span class="sourceLineNo">252</span>                        SliceIterator siter = (SliceIterator) tdata.getSliceIterator(null, shape, null); <a name="line.252"></a>
<span class="sourceLineNo">253</span>                        final int[] pos = iter.getPos();<a name="line.253"></a>
<span class="sourceLineNo">254</span>                        while (iter.hasNext()) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>                                siter.setStart(pos);<a name="line.255"></a>
<span class="sourceLineNo">256</span>                                tdata.setSlice(a, siter);<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        }<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>                } else {<a name="line.259"></a>
<span class="sourceLineNo">260</span>                        // for each value, set slice given by repeats<a name="line.260"></a>
<span class="sourceLineNo">261</span>                        final int[] skip = new int[rank];<a name="line.261"></a>
<span class="sourceLineNo">262</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                                if (reps[i] == 1) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>                                        skip[i] = newShape[i];<a name="line.264"></a>
<span class="sourceLineNo">265</span>                                } else {<a name="line.265"></a>
<span class="sourceLineNo">266</span>                                        skip[i] = shape[i];<a name="line.266"></a>
<span class="sourceLineNo">267</span>                                }<a name="line.267"></a>
<span class="sourceLineNo">268</span>                        }<a name="line.268"></a>
<span class="sourceLineNo">269</span>                        <a name="line.269"></a>
<span class="sourceLineNo">270</span>                        Dataset aa = convertToDataset(a);<a name="line.270"></a>
<span class="sourceLineNo">271</span>                        IndexIterator ita = aa.getIterator(true);<a name="line.271"></a>
<span class="sourceLineNo">272</span>                        final int[] pos = ita.getPos();<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>                        final int[] sstart = new int[rank];<a name="line.274"></a>
<span class="sourceLineNo">275</span>                        final int extra = rank - pos.length;<a name="line.275"></a>
<span class="sourceLineNo">276</span>                        for (int i = 0; i &lt; extra; i++) {<a name="line.276"></a>
<span class="sourceLineNo">277</span>                                sstart[i] = 0;<a name="line.277"></a>
<span class="sourceLineNo">278</span>                        }<a name="line.278"></a>
<span class="sourceLineNo">279</span>                        SliceIterator siter = (SliceIterator) tdata.getSliceIterator(sstart, null, skip);<a name="line.279"></a>
<span class="sourceLineNo">280</span>                        while (ita.hasNext()) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                                for (int i = 0; i &lt; pos.length; i++) {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                                        sstart[i + extra] = pos[i];<a name="line.282"></a>
<span class="sourceLineNo">283</span>                                }<a name="line.283"></a>
<span class="sourceLineNo">284</span>                                siter.setStart(sstart);<a name="line.284"></a>
<span class="sourceLineNo">285</span>                                tdata.setSlice(aa.getObjectAbs(ita.index), siter);<a name="line.285"></a>
<span class="sourceLineNo">286</span>                        }<a name="line.286"></a>
<span class="sourceLineNo">287</span>                }<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>                return tdata;<a name="line.289"></a>
<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>        /**<a name="line.292"></a>
<span class="sourceLineNo">293</span>         * Permute copy of dataset's axes so that given order is old order:<a name="line.293"></a>
<span class="sourceLineNo">294</span>         * &lt;pre&gt;<a name="line.294"></a>
<span class="sourceLineNo">295</span>         *  axisPerm = (p(0), p(1),...) =&gt; newdata(n(0), n(1),...) = olddata(o(0), o(1), ...)<a name="line.295"></a>
<span class="sourceLineNo">296</span>         *  such that n(i) = o(p(i)) for all i<a name="line.296"></a>
<span class="sourceLineNo">297</span>         * &lt;/pre&gt;<a name="line.297"></a>
<span class="sourceLineNo">298</span>         * I.e. for a 3D dataset (1,0,2) implies the new dataset has its 1st dimension<a name="line.298"></a>
<span class="sourceLineNo">299</span>         * running along the old dataset's 2nd dimension and the new 2nd is the old 1st.<a name="line.299"></a>
<span class="sourceLineNo">300</span>         * The 3rd dimension is left unchanged.<a name="line.300"></a>
<span class="sourceLineNo">301</span>         * <a name="line.301"></a>
<span class="sourceLineNo">302</span>         * @param a<a name="line.302"></a>
<span class="sourceLineNo">303</span>         * @param axes if null or zero length then axes order reversed<a name="line.303"></a>
<span class="sourceLineNo">304</span>         * @return remapped copy of data<a name="line.304"></a>
<span class="sourceLineNo">305</span>         */<a name="line.305"></a>
<span class="sourceLineNo">306</span>        public static Dataset transpose(final IDataset a, int... axes) {<a name="line.306"></a>
<span class="sourceLineNo">307</span>                return convertToDataset(a).transpose(axes);<a name="line.307"></a>
<span class="sourceLineNo">308</span>        }<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>        /**<a name="line.310"></a>
<span class="sourceLineNo">311</span>         * Swap two axes in dataset<a name="line.311"></a>
<span class="sourceLineNo">312</span>         * @param a<a name="line.312"></a>
<span class="sourceLineNo">313</span>         * @param axis1<a name="line.313"></a>
<span class="sourceLineNo">314</span>         * @param axis2<a name="line.314"></a>
<span class="sourceLineNo">315</span>         * @return swapped dataset<a name="line.315"></a>
<span class="sourceLineNo">316</span>         */<a name="line.316"></a>
<span class="sourceLineNo">317</span>        public static Dataset swapAxes(final IDataset a, int axis1, int axis2) {<a name="line.317"></a>
<span class="sourceLineNo">318</span>                return convertToDataset(a).swapAxes(axis1, axis2);<a name="line.318"></a>
<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>        /**<a name="line.321"></a>
<span class="sourceLineNo">322</span>         * @param a<a name="line.322"></a>
<span class="sourceLineNo">323</span>         * @return sorted flattened copy of dataset <a name="line.323"></a>
<span class="sourceLineNo">324</span>         */<a name="line.324"></a>
<span class="sourceLineNo">325</span>        public static &lt;T extends Dataset&gt; T sort(final T a) {<a name="line.325"></a>
<span class="sourceLineNo">326</span>                return sort(a, (Integer) null);<a name="line.326"></a>
<span class="sourceLineNo">327</span>        }<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>         * @param a<a name="line.330"></a>
<span class="sourceLineNo">331</span>         * @param axis to sort along<a name="line.331"></a>
<span class="sourceLineNo">332</span>         * @return dataset sorted along axis<a name="line.332"></a>
<span class="sourceLineNo">333</span>         */<a name="line.333"></a>
<span class="sourceLineNo">334</span>        public static &lt;T extends Dataset&gt; T sort(final T a, final Integer axis) {<a name="line.334"></a>
<span class="sourceLineNo">335</span>                Dataset s = a.clone();<a name="line.335"></a>
<span class="sourceLineNo">336</span>                return (T) s.sort(axis);<a name="line.336"></a>
<span class="sourceLineNo">337</span>        }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>        /**<a name="line.339"></a>
<span class="sourceLineNo">340</span>         * Sort in place given dataset and reorder ancillary datasets too<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * @param a dataset to be sorted<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * @param b ancillary datasets<a name="line.342"></a>
<span class="sourceLineNo">343</span>         */<a name="line.343"></a>
<span class="sourceLineNo">344</span>        public static void sort(Dataset a, Dataset... b) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>                if (!DTypeUtils.isDTypeNumerical(a.getDType())) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                        throw new UnsupportedOperationException("Sorting non-numerical datasets not supported yet");<a name="line.346"></a>
<span class="sourceLineNo">347</span>                }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>                // gather all datasets as double dataset copies<a name="line.349"></a>
<span class="sourceLineNo">350</span>                DoubleDataset s = copy(DoubleDataset.class, a);<a name="line.350"></a>
<span class="sourceLineNo">351</span>                int l = b == null ? 0 : b.length;<a name="line.351"></a>
<span class="sourceLineNo">352</span>                DoubleDataset[] t = new DoubleDataset[l];<a name="line.352"></a>
<span class="sourceLineNo">353</span>                int n = 0;<a name="line.353"></a>
<span class="sourceLineNo">354</span>                for (int i = 0; i &lt; l; i++) {<a name="line.354"></a>
<span class="sourceLineNo">355</span>                        if (b[i] != null) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                                if (!DTypeUtils.isDTypeNumerical(b[i].getDType())) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>                                        throw new UnsupportedOperationException("Sorting non-numerical datasets not supported yet");<a name="line.357"></a>
<span class="sourceLineNo">358</span>                                }<a name="line.358"></a>
<span class="sourceLineNo">359</span>                                t[i] = copy(DoubleDataset.class, b[i]);<a name="line.359"></a>
<span class="sourceLineNo">360</span>                                n++;<a name="line.360"></a>
<span class="sourceLineNo">361</span>                        }<a name="line.361"></a>
<span class="sourceLineNo">362</span>                }<a name="line.362"></a>
<span class="sourceLineNo">363</span><a name="line.363"></a>
<span class="sourceLineNo">364</span>                double[][] y = new double[n][];<a name="line.364"></a>
<span class="sourceLineNo">365</span>                for (int i = 0, j = 0; i &lt; l; i++) {<a name="line.365"></a>
<span class="sourceLineNo">366</span>                        if (t[i] != null) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                                y[j++] = t[i].getData();<a name="line.367"></a>
<span class="sourceLineNo">368</span>                        }<a name="line.368"></a>
<span class="sourceLineNo">369</span>                }<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>                MathArrays.sortInPlace(s.getData(), y);<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>                a.setSlice(s);<a name="line.373"></a>
<span class="sourceLineNo">374</span>                for (int i = 0; i &lt; l; i++) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>                        if (b[i] != null) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>                                b[i].setSlice(t[i]);<a name="line.376"></a>
<span class="sourceLineNo">377</span>                        }<a name="line.377"></a>
<span class="sourceLineNo">378</span>                }<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>        /**<a name="line.381"></a>
<span class="sourceLineNo">382</span>         * Concatenate the set of datasets along given axis<a name="line.382"></a>
<span class="sourceLineNo">383</span>         * @param as<a name="line.383"></a>
<span class="sourceLineNo">384</span>         * @param axis<a name="line.384"></a>
<span class="sourceLineNo">385</span>         * @return concatenated dataset<a name="line.385"></a>
<span class="sourceLineNo">386</span>         */<a name="line.386"></a>
<span class="sourceLineNo">387</span>        public static Dataset concatenate(final IDataset[] as, final int axis) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>                if (as == null || as.length == 0) {<a name="line.388"></a>
<span class="sourceLineNo">389</span>                        utilsLogger.error("No datasets given");<a name="line.389"></a>
<span class="sourceLineNo">390</span>                        throw new IllegalArgumentException("No datasets given");<a name="line.390"></a>
<span class="sourceLineNo">391</span>                }<a name="line.391"></a>
<span class="sourceLineNo">392</span>                IDataset a = as[0];<a name="line.392"></a>
<span class="sourceLineNo">393</span>                if (as.length == 1) {<a name="line.393"></a>
<span class="sourceLineNo">394</span>                        return convertToDataset(a.clone());<a name="line.394"></a>
<span class="sourceLineNo">395</span>                }<a name="line.395"></a>
<span class="sourceLineNo">396</span>                int[] ashape = a.getShape();<a name="line.396"></a>
<span class="sourceLineNo">397</span>                int at = DTypeUtils.getDType(a);<a name="line.397"></a>
<span class="sourceLineNo">398</span>                int anum = as.length;<a name="line.398"></a>
<span class="sourceLineNo">399</span>                int isize = a.getElementsPerItem();<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>                int i = 1;<a name="line.401"></a>
<span class="sourceLineNo">402</span>                for (; i &lt; anum; i++) {<a name="line.402"></a>
<span class="sourceLineNo">403</span>                        if (at != DTypeUtils.getDType(as[i])) {<a name="line.403"></a>
<span class="sourceLineNo">404</span>                                utilsLogger.error("Datasets are not of same type");<a name="line.404"></a>
<span class="sourceLineNo">405</span>                                break;<a name="line.405"></a>
<span class="sourceLineNo">406</span>                        }<a name="line.406"></a>
<span class="sourceLineNo">407</span>                        if (!ShapeUtils.areShapesCompatible(ashape, as[i].getShape(), axis)) {<a name="line.407"></a>
<span class="sourceLineNo">408</span>                                utilsLogger.error("Datasets' shapes are not equal");<a name="line.408"></a>
<span class="sourceLineNo">409</span>                                break;<a name="line.409"></a>
<span class="sourceLineNo">410</span>                        }<a name="line.410"></a>
<span class="sourceLineNo">411</span>                        final int is = as[i].getElementsPerItem();<a name="line.411"></a>
<span class="sourceLineNo">412</span>                        if (isize &lt; is)<a name="line.412"></a>
<span class="sourceLineNo">413</span>                                isize = is;<a name="line.413"></a>
<span class="sourceLineNo">414</span>                }<a name="line.414"></a>
<span class="sourceLineNo">415</span>                if (i &lt; anum) {<a name="line.415"></a>
<span class="sourceLineNo">416</span>                        utilsLogger.error("Dataset are not compatible");<a name="line.416"></a>
<span class="sourceLineNo">417</span>                        throw new IllegalArgumentException("Datasets are not compatible");<a name="line.417"></a>
<span class="sourceLineNo">418</span>                }<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>                for (i = 1; i &lt; anum; i++) {<a name="line.420"></a>
<span class="sourceLineNo">421</span>                        ashape[axis] += as[i].getShape()[axis];<a name="line.421"></a>
<span class="sourceLineNo">422</span>                }<a name="line.422"></a>
<span class="sourceLineNo">423</span><a name="line.423"></a>
<span class="sourceLineNo">424</span>                @SuppressWarnings("deprecation")<a name="line.424"></a>
<span class="sourceLineNo">425</span>                Dataset result = DatasetFactory.zeros(isize, ashape, at);<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>                int[] start = new int[ashape.length];<a name="line.427"></a>
<span class="sourceLineNo">428</span>                int[] stop = ashape;<a name="line.428"></a>
<span class="sourceLineNo">429</span>                stop[axis] = 0;<a name="line.429"></a>
<span class="sourceLineNo">430</span>                for (i = 0; i &lt; anum; i++) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>                        IDataset b = as[i];<a name="line.431"></a>
<span class="sourceLineNo">432</span>                        int[] bshape = b.getShape();<a name="line.432"></a>
<span class="sourceLineNo">433</span>                        stop[axis] += bshape[axis];<a name="line.433"></a>
<span class="sourceLineNo">434</span>                        result.setSlice(b, start, stop, null);<a name="line.434"></a>
<span class="sourceLineNo">435</span>                        start[axis] += bshape[axis];<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>                return result;<a name="line.438"></a>
<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
<span class="sourceLineNo">440</span><a name="line.440"></a>
<span class="sourceLineNo">441</span>        /**<a name="line.441"></a>
<span class="sourceLineNo">442</span>         * Split a dataset into equal sections along given axis<a name="line.442"></a>
<span class="sourceLineNo">443</span>         * @param a<a name="line.443"></a>
<span class="sourceLineNo">444</span>         * @param sections<a name="line.444"></a>
<span class="sourceLineNo">445</span>         * @param axis<a name="line.445"></a>
<span class="sourceLineNo">446</span>         * @param checkEqual makes sure the division is into equal parts<a name="line.446"></a>
<span class="sourceLineNo">447</span>         * @return list of split datasets<a name="line.447"></a>
<span class="sourceLineNo">448</span>         */<a name="line.448"></a>
<span class="sourceLineNo">449</span>        public static List&lt;Dataset&gt; split(final Dataset a, int sections, final int axis, final boolean checkEqual) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>                int[] ashape = a.getShapeRef();<a name="line.450"></a>
<span class="sourceLineNo">451</span>                int rank = ashape.length;<a name="line.451"></a>
<span class="sourceLineNo">452</span>                if (axis &gt; rank) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>                        utilsLogger.error("Axis exceeds rank of dataset");<a name="line.453"></a>
<span class="sourceLineNo">454</span>                        throw new IllegalArgumentException("Axis exceeds rank of dataset");<a name="line.454"></a>
<span class="sourceLineNo">455</span>                }<a name="line.455"></a>
<span class="sourceLineNo">456</span>                int imax = ashape[axis];<a name="line.456"></a>
<span class="sourceLineNo">457</span>                if (checkEqual &amp;&amp; (imax%sections) != 0) {<a name="line.457"></a>
<span class="sourceLineNo">458</span>                        utilsLogger.error("Number of sections does not divide axis into equal parts");<a name="line.458"></a>
<span class="sourceLineNo">459</span>                        throw new IllegalArgumentException("Number of sections does not divide axis into equal parts");<a name="line.459"></a>
<span class="sourceLineNo">460</span>                }<a name="line.460"></a>
<span class="sourceLineNo">461</span>                int n = (imax + sections - 1) / sections;<a name="line.461"></a>
<span class="sourceLineNo">462</span>                int[] indices = new int[sections-1];<a name="line.462"></a>
<span class="sourceLineNo">463</span>                for (int i = 1; i &lt; sections; i++)<a name="line.463"></a>
<span class="sourceLineNo">464</span>                        indices[i-1] = n*i;<a name="line.464"></a>
<span class="sourceLineNo">465</span>                return split(a, indices, axis);<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>        /**<a name="line.468"></a>
<span class="sourceLineNo">469</span>         * Split a dataset into parts along given axis<a name="line.469"></a>
<span class="sourceLineNo">470</span>         * @param a<a name="line.470"></a>
<span class="sourceLineNo">471</span>         * @param indices<a name="line.471"></a>
<span class="sourceLineNo">472</span>         * @param axis<a name="line.472"></a>
<span class="sourceLineNo">473</span>         * @return list of split datasets<a name="line.473"></a>
<span class="sourceLineNo">474</span>         */<a name="line.474"></a>
<span class="sourceLineNo">475</span>        @SuppressWarnings("deprecation")<a name="line.475"></a>
<span class="sourceLineNo">476</span>        public static List&lt;Dataset&gt; split(final Dataset a, int[] indices, final int axis) {<a name="line.476"></a>
<span class="sourceLineNo">477</span>                final int[] ashape = a.getShapeRef();<a name="line.477"></a>
<span class="sourceLineNo">478</span>                final int rank = ashape.length;<a name="line.478"></a>
<span class="sourceLineNo">479</span>                if (axis &gt; rank) {<a name="line.479"></a>
<span class="sourceLineNo">480</span>                        utilsLogger.error("Axis exceeds rank of dataset");<a name="line.480"></a>
<span class="sourceLineNo">481</span>                        throw new IllegalArgumentException("Axis exceeds rank of dataset");<a name="line.481"></a>
<span class="sourceLineNo">482</span>                }<a name="line.482"></a>
<span class="sourceLineNo">483</span>                final int imax = ashape[axis];<a name="line.483"></a>
<span class="sourceLineNo">484</span><a name="line.484"></a>
<span class="sourceLineNo">485</span>                final List&lt;Dataset&gt; result = new ArrayList&lt;Dataset&gt;();<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>                final int[] nshape = ashape.clone();<a name="line.487"></a>
<span class="sourceLineNo">488</span>                final int is = a.getElementsPerItem();<a name="line.488"></a>
<span class="sourceLineNo">489</span><a name="line.489"></a>
<span class="sourceLineNo">490</span>                int oind = 0;<a name="line.490"></a>
<span class="sourceLineNo">491</span>                final int[] start = new int[rank];<a name="line.491"></a>
<span class="sourceLineNo">492</span>                final int[] stop = new int[rank];<a name="line.492"></a>
<span class="sourceLineNo">493</span>                final int[] step = new int[rank];<a name="line.493"></a>
<span class="sourceLineNo">494</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.494"></a>
<span class="sourceLineNo">495</span>                        start[i] = 0;<a name="line.495"></a>
<span class="sourceLineNo">496</span>                        stop[i] = ashape[i];<a name="line.496"></a>
<span class="sourceLineNo">497</span>                        step[i] = 1;<a name="line.497"></a>
<span class="sourceLineNo">498</span>                }<a name="line.498"></a>
<span class="sourceLineNo">499</span>                for (int ind : indices) {<a name="line.499"></a>
<span class="sourceLineNo">500</span>                        if (ind &gt; imax) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>                                result.add(DatasetFactory.zeros(is, new int[] {0}, a.getDType()));<a name="line.501"></a>
<span class="sourceLineNo">502</span>                        } else {<a name="line.502"></a>
<span class="sourceLineNo">503</span>                                nshape[axis] = ind - oind;<a name="line.503"></a>
<span class="sourceLineNo">504</span>                                start[axis] = oind;<a name="line.504"></a>
<span class="sourceLineNo">505</span>                                stop[axis] = ind;<a name="line.505"></a>
<span class="sourceLineNo">506</span>                                Dataset n = DatasetFactory.zeros(is, nshape, a.getDType());<a name="line.506"></a>
<span class="sourceLineNo">507</span>                                IndexIterator iter = a.getSliceIterator(start, stop, step);<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>                                a.fillDataset(n, iter);<a name="line.509"></a>
<span class="sourceLineNo">510</span>                                result.add(n);<a name="line.510"></a>
<span class="sourceLineNo">511</span>                                oind = ind;<a name="line.511"></a>
<span class="sourceLineNo">512</span>                        }<a name="line.512"></a>
<span class="sourceLineNo">513</span>                }<a name="line.513"></a>
<span class="sourceLineNo">514</span><a name="line.514"></a>
<span class="sourceLineNo">515</span>                if (imax &gt; oind) {<a name="line.515"></a>
<span class="sourceLineNo">516</span>                        nshape[axis] = imax - oind;<a name="line.516"></a>
<span class="sourceLineNo">517</span>                        start[axis] = oind;<a name="line.517"></a>
<span class="sourceLineNo">518</span>                        stop[axis] = imax;<a name="line.518"></a>
<span class="sourceLineNo">519</span>                        Dataset n = DatasetFactory.zeros(is, nshape, a.getDType());<a name="line.519"></a>
<span class="sourceLineNo">520</span>                        IndexIterator iter = a.getSliceIterator(start, stop, step);<a name="line.520"></a>
<span class="sourceLineNo">521</span><a name="line.521"></a>
<span class="sourceLineNo">522</span>                        a.fillDataset(n, iter);<a name="line.522"></a>
<span class="sourceLineNo">523</span>                        result.add(n);<a name="line.523"></a>
<span class="sourceLineNo">524</span>                }<a name="line.524"></a>
<span class="sourceLineNo">525</span><a name="line.525"></a>
<span class="sourceLineNo">526</span>                return result;<a name="line.526"></a>
<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
<span class="sourceLineNo">528</span><a name="line.528"></a>
<span class="sourceLineNo">529</span>        /**<a name="line.529"></a>
<span class="sourceLineNo">530</span>         * Constructs a dataset which has its elements along an axis replicated from<a name="line.530"></a>
<span class="sourceLineNo">531</span>         * the original dataset by the number of times given in the repeats array.<a name="line.531"></a>
<span class="sourceLineNo">532</span>         * <a name="line.532"></a>
<span class="sourceLineNo">533</span>         * By default, axis=-1 implies using a flattened version of the input dataset <a name="line.533"></a>
<span class="sourceLineNo">534</span>         *<a name="line.534"></a>
<span class="sourceLineNo">535</span>         * @param a<a name="line.535"></a>
<span class="sourceLineNo">536</span>         * @param repeats <a name="line.536"></a>
<span class="sourceLineNo">537</span>         * @param axis<a name="line.537"></a>
<span class="sourceLineNo">538</span>         * @return dataset<a name="line.538"></a>
<span class="sourceLineNo">539</span>         */<a name="line.539"></a>
<span class="sourceLineNo">540</span>        public static &lt;T extends Dataset&gt; T repeat(T a, int[] repeats, int axis) {<a name="line.540"></a>
<span class="sourceLineNo">541</span>                Serializable buf = a.getBuffer();<a name="line.541"></a>
<span class="sourceLineNo">542</span>                int[] shape = a.getShape();<a name="line.542"></a>
<span class="sourceLineNo">543</span>                int rank = shape.length;<a name="line.543"></a>
<span class="sourceLineNo">544</span>                final int is = a.getElementsPerItem();<a name="line.544"></a>
<span class="sourceLineNo">545</span><a name="line.545"></a>
<span class="sourceLineNo">546</span>                if (axis &gt;= rank) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>                        utilsLogger.warn("Axis value is out of bounds");<a name="line.547"></a>
<span class="sourceLineNo">548</span>                        throw new IllegalArgumentException("Axis value is out of bounds");<a name="line.548"></a>
<span class="sourceLineNo">549</span>                }<a name="line.549"></a>
<span class="sourceLineNo">550</span><a name="line.550"></a>
<span class="sourceLineNo">551</span>                int alen;<a name="line.551"></a>
<span class="sourceLineNo">552</span>                if (axis &lt; 0) {<a name="line.552"></a>
<span class="sourceLineNo">553</span>                        alen = a.getSize();<a name="line.553"></a>
<span class="sourceLineNo">554</span>                        axis = 0;<a name="line.554"></a>
<span class="sourceLineNo">555</span>                        rank = 1;<a name="line.555"></a>
<span class="sourceLineNo">556</span>                        shape[0] = alen;<a name="line.556"></a>
<span class="sourceLineNo">557</span>                } else {<a name="line.557"></a>
<span class="sourceLineNo">558</span>                        alen = shape[axis];<a name="line.558"></a>
<span class="sourceLineNo">559</span>                }<a name="line.559"></a>
<span class="sourceLineNo">560</span>                int rlen = repeats.length;<a name="line.560"></a>
<span class="sourceLineNo">561</span>                if (rlen != 1 &amp;&amp; rlen != alen) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>                        utilsLogger.warn("Repeats array should have length of 1 or match chosen axis");<a name="line.562"></a>
<span class="sourceLineNo">563</span>                        throw new IllegalArgumentException("Repeats array should have length of 1 or match chosen axis");<a name="line.563"></a>
<span class="sourceLineNo">564</span>                }<a name="line.564"></a>
<span class="sourceLineNo">565</span><a name="line.565"></a>
<span class="sourceLineNo">566</span>                for (int i = 0; i &lt; rlen; i++) {<a name="line.566"></a>
<span class="sourceLineNo">567</span>                        if (repeats[i] &lt; 0) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>                                utilsLogger.warn("Negative repeat value is not allowed");<a name="line.568"></a>
<span class="sourceLineNo">569</span>                                throw new IllegalArgumentException("Negative repeat value is not allowed");<a name="line.569"></a>
<span class="sourceLineNo">570</span>                        }<a name="line.570"></a>
<span class="sourceLineNo">571</span>                }<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>                int[] newShape = new int[rank];<a name="line.573"></a>
<span class="sourceLineNo">574</span>                for (int i = 0; i &lt; rank; i ++)<a name="line.574"></a>
<span class="sourceLineNo">575</span>                        newShape[i] = shape[i];<a name="line.575"></a>
<span class="sourceLineNo">576</span><a name="line.576"></a>
<span class="sourceLineNo">577</span>                // do single repeat separately<a name="line.577"></a>
<span class="sourceLineNo">578</span>                if (repeats.length == 1) {<a name="line.578"></a>
<span class="sourceLineNo">579</span>                        newShape[axis] *= repeats[0];<a name="line.579"></a>
<span class="sourceLineNo">580</span>                } else {<a name="line.580"></a>
<span class="sourceLineNo">581</span>                        int nlen = 0;<a name="line.581"></a>
<span class="sourceLineNo">582</span>                        for (int i = 0; i &lt; alen; i++) {<a name="line.582"></a>
<span class="sourceLineNo">583</span>                                nlen += repeats[i];<a name="line.583"></a>
<span class="sourceLineNo">584</span>                        }<a name="line.584"></a>
<span class="sourceLineNo">585</span>                        newShape[axis] = nlen;<a name="line.585"></a>
<span class="sourceLineNo">586</span>                }<a name="line.586"></a>
<span class="sourceLineNo">587</span><a name="line.587"></a>
<span class="sourceLineNo">588</span>                @SuppressWarnings("deprecation")<a name="line.588"></a>
<span class="sourceLineNo">589</span>                Dataset rdata = DatasetFactory.zeros(is, newShape, a.getDType());<a name="line.589"></a>
<span class="sourceLineNo">590</span>                Serializable nbuf = rdata.getBuffer();<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
<span class="sourceLineNo">592</span>                int csize = is; // chunk size<a name="line.592"></a>
<span class="sourceLineNo">593</span>                for (int i = axis+1; i &lt; rank; i++) {<a name="line.593"></a>
<span class="sourceLineNo">594</span>                        csize *= newShape[i];<a name="line.594"></a>
<span class="sourceLineNo">595</span>                }<a name="line.595"></a>
<span class="sourceLineNo">596</span>                int nout = 1;<a name="line.596"></a>
<span class="sourceLineNo">597</span>                for (int i = 0; i &lt; axis; i++) {<a name="line.597"></a>
<span class="sourceLineNo">598</span>                        nout *= newShape[i];<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>                int oi = 0;<a name="line.601"></a>
<span class="sourceLineNo">602</span>                int ni = 0;<a name="line.602"></a>
<span class="sourceLineNo">603</span>                if (rlen == 1) { // do single repeat separately<a name="line.603"></a>
<span class="sourceLineNo">604</span>                        for (int i = 0; i &lt; nout; i++) {<a name="line.604"></a>
<span class="sourceLineNo">605</span>                                for (int j = 0; j &lt; shape[axis]; j++) {<a name="line.605"></a>
<span class="sourceLineNo">606</span>                                        for (int k = 0; k &lt; repeats[0]; k++) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>                                                System.arraycopy(buf, oi, nbuf, ni, csize);<a name="line.607"></a>
<span class="sourceLineNo">608</span>                                                ni += csize;<a name="line.608"></a>
<span class="sourceLineNo">609</span>                                        }<a name="line.609"></a>
<span class="sourceLineNo">610</span>                                        oi += csize;<a name="line.610"></a>
<span class="sourceLineNo">611</span>                                }<a name="line.611"></a>
<span class="sourceLineNo">612</span>                        }<a name="line.612"></a>
<span class="sourceLineNo">613</span>                } else {<a name="line.613"></a>
<span class="sourceLineNo">614</span>                        for (int i = 0; i &lt; nout; i++) {<a name="line.614"></a>
<span class="sourceLineNo">615</span>                                for (int j = 0; j &lt; shape[axis]; j++) {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                                        for (int k = 0; k &lt; repeats[j]; k++) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>                                                System.arraycopy(buf, oi, nbuf, ni, csize);<a name="line.617"></a>
<span class="sourceLineNo">618</span>                                                ni += csize;<a name="line.618"></a>
<span class="sourceLineNo">619</span>                                        }<a name="line.619"></a>
<span class="sourceLineNo">620</span>                                        oi += csize;<a name="line.620"></a>
<span class="sourceLineNo">621</span>                                }<a name="line.621"></a>
<span class="sourceLineNo">622</span>                        }<a name="line.622"></a>
<span class="sourceLineNo">623</span>                }<a name="line.623"></a>
<span class="sourceLineNo">624</span><a name="line.624"></a>
<span class="sourceLineNo">625</span>                return (T) rdata;<a name="line.625"></a>
<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>        /**<a name="line.628"></a>
<span class="sourceLineNo">629</span>         * Resize a dataset <a name="line.629"></a>
<span class="sourceLineNo">630</span>         * @param a<a name="line.630"></a>
<span class="sourceLineNo">631</span>         * @param shape<a name="line.631"></a>
<span class="sourceLineNo">632</span>         * @return new dataset with new shape and items that are truncated or repeated, as necessary<a name="line.632"></a>
<span class="sourceLineNo">633</span>         */<a name="line.633"></a>
<span class="sourceLineNo">634</span>        public static &lt;T extends Dataset&gt; T resize(final T a, final int... shape) {<a name="line.634"></a>
<span class="sourceLineNo">635</span>                int size = a.getSize();<a name="line.635"></a>
<span class="sourceLineNo">636</span>                @SuppressWarnings("deprecation")<a name="line.636"></a>
<span class="sourceLineNo">637</span>                Dataset rdata = DatasetFactory.zeros(a.getElementsPerItem(), shape, a.getDType());<a name="line.637"></a>
<span class="sourceLineNo">638</span>                IndexIterator it = rdata.getIterator();<a name="line.638"></a>
<span class="sourceLineNo">639</span>                while (it.hasNext()) {<a name="line.639"></a>
<span class="sourceLineNo">640</span>                        rdata.setObjectAbs(it.index, a.getObjectAbs(it.index % size));<a name="line.640"></a>
<span class="sourceLineNo">641</span>                }<a name="line.641"></a>
<span class="sourceLineNo">642</span><a name="line.642"></a>
<span class="sourceLineNo">643</span>                return (T) rdata;<a name="line.643"></a>
<span class="sourceLineNo">644</span>        }<a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>        /**<a name="line.646"></a>
<span class="sourceLineNo">647</span>         * Copy and cast a dataset<a name="line.647"></a>
<span class="sourceLineNo">648</span>         * <a name="line.648"></a>
<span class="sourceLineNo">649</span>         * @param d<a name="line.649"></a>
<span class="sourceLineNo">650</span>         *            The dataset to be copied<a name="line.650"></a>
<span class="sourceLineNo">651</span>         * @param dtype dataset type<a name="line.651"></a>
<span class="sourceLineNo">652</span>         * @return copied dataset of given type<a name="line.652"></a>
<span class="sourceLineNo">653</span>         */<a name="line.653"></a>
<span class="sourceLineNo">654</span>        public static Dataset copy(final IDataset d, final int dtype) {<a name="line.654"></a>
<span class="sourceLineNo">655</span>                Dataset a = convertToDataset(d);<a name="line.655"></a>
<span class="sourceLineNo">656</span><a name="line.656"></a>
<span class="sourceLineNo">657</span>                Dataset c = null;<a name="line.657"></a>
<span class="sourceLineNo">658</span>                try {<a name="line.658"></a>
<span class="sourceLineNo">659</span>                        // copy across the data<a name="line.659"></a>
<span class="sourceLineNo">660</span>                        switch (dtype) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>                        case Dataset.STRING:<a name="line.661"></a>
<span class="sourceLineNo">662</span>                                c = new StringDataset(a);<a name="line.662"></a>
<span class="sourceLineNo">663</span>                                break;<a name="line.663"></a>
<span class="sourceLineNo">664</span>                        case Dataset.BOOL:<a name="line.664"></a>
<span class="sourceLineNo">665</span>                                c = new BooleanDataset(a);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                                break;<a name="line.666"></a>
<span class="sourceLineNo">667</span>                        case Dataset.INT8:<a name="line.667"></a>
<span class="sourceLineNo">668</span>                                if (a instanceof CompoundDataset)<a name="line.668"></a>
<span class="sourceLineNo">669</span>                                        c = new CompoundByteDataset(a);<a name="line.669"></a>
<span class="sourceLineNo">670</span>                                else<a name="line.670"></a>
<span class="sourceLineNo">671</span>                                        c = new ByteDataset(a);<a name="line.671"></a>
<span class="sourceLineNo">672</span>                                break;<a name="line.672"></a>
<span class="sourceLineNo">673</span>                        case Dataset.INT16:<a name="line.673"></a>
<span class="sourceLineNo">674</span>                                if (a instanceof CompoundDataset)<a name="line.674"></a>
<span class="sourceLineNo">675</span>                                        c = new CompoundShortDataset(a);<a name="line.675"></a>
<span class="sourceLineNo">676</span>                                else<a name="line.676"></a>
<span class="sourceLineNo">677</span>                                        c = new ShortDataset(a);<a name="line.677"></a>
<span class="sourceLineNo">678</span>                                break;<a name="line.678"></a>
<span class="sourceLineNo">679</span>                        case Dataset.INT32:<a name="line.679"></a>
<span class="sourceLineNo">680</span>                                if (a instanceof CompoundDataset)<a name="line.680"></a>
<span class="sourceLineNo">681</span>                                        c = new CompoundIntegerDataset(a);<a name="line.681"></a>
<span class="sourceLineNo">682</span>                                else<a name="line.682"></a>
<span class="sourceLineNo">683</span>                                        c = new IntegerDataset(a);<a name="line.683"></a>
<span class="sourceLineNo">684</span>                                break;<a name="line.684"></a>
<span class="sourceLineNo">685</span>                        case Dataset.INT64:<a name="line.685"></a>
<span class="sourceLineNo">686</span>                                if (a instanceof CompoundDataset)<a name="line.686"></a>
<span class="sourceLineNo">687</span>                                        c = new CompoundLongDataset(a);<a name="line.687"></a>
<span class="sourceLineNo">688</span>                                else<a name="line.688"></a>
<span class="sourceLineNo">689</span>                                        c = new LongDataset(a);<a name="line.689"></a>
<span class="sourceLineNo">690</span>                                break;<a name="line.690"></a>
<span class="sourceLineNo">691</span>                        case Dataset.ARRAYINT8:<a name="line.691"></a>
<span class="sourceLineNo">692</span>                                if (a instanceof CompoundDataset)<a name="line.692"></a>
<span class="sourceLineNo">693</span>                                        c = new CompoundByteDataset((CompoundDataset) a);<a name="line.693"></a>
<span class="sourceLineNo">694</span>                                else<a name="line.694"></a>
<span class="sourceLineNo">695</span>                                        c = new CompoundByteDataset(a);<a name="line.695"></a>
<span class="sourceLineNo">696</span>                                break;<a name="line.696"></a>
<span class="sourceLineNo">697</span>                        case Dataset.ARRAYINT16:<a name="line.697"></a>
<span class="sourceLineNo">698</span>                                if (a instanceof CompoundDataset)<a name="line.698"></a>
<span class="sourceLineNo">699</span>                                        c = new CompoundShortDataset((CompoundDataset) a);<a name="line.699"></a>
<span class="sourceLineNo">700</span>                                else<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                        c = new CompoundShortDataset(a);<a name="line.701"></a>
<span class="sourceLineNo">702</span>                                break;<a name="line.702"></a>
<span class="sourceLineNo">703</span>                        case Dataset.ARRAYINT32:<a name="line.703"></a>
<span class="sourceLineNo">704</span>                                if (a instanceof CompoundDataset)<a name="line.704"></a>
<span class="sourceLineNo">705</span>                                        c = new CompoundIntegerDataset((CompoundDataset) a);<a name="line.705"></a>
<span class="sourceLineNo">706</span>                                else<a name="line.706"></a>
<span class="sourceLineNo">707</span>                                        c = new CompoundIntegerDataset(a);<a name="line.707"></a>
<span class="sourceLineNo">708</span>                                break;<a name="line.708"></a>
<span class="sourceLineNo">709</span>                        case Dataset.ARRAYINT64:<a name="line.709"></a>
<span class="sourceLineNo">710</span>                                if (a instanceof CompoundDataset)<a name="line.710"></a>
<span class="sourceLineNo">711</span>                                        c = new CompoundLongDataset((CompoundDataset) a);<a name="line.711"></a>
<span class="sourceLineNo">712</span>                                else<a name="line.712"></a>
<span class="sourceLineNo">713</span>                                        c = new CompoundLongDataset(a);<a name="line.713"></a>
<span class="sourceLineNo">714</span>                                break;<a name="line.714"></a>
<span class="sourceLineNo">715</span>                        case Dataset.FLOAT32:<a name="line.715"></a>
<span class="sourceLineNo">716</span>                                c = new FloatDataset(a);<a name="line.716"></a>
<span class="sourceLineNo">717</span>                                break;<a name="line.717"></a>
<span class="sourceLineNo">718</span>                        case Dataset.FLOAT64:<a name="line.718"></a>
<span class="sourceLineNo">719</span>                                c = new DoubleDataset(a);<a name="line.719"></a>
<span class="sourceLineNo">720</span>                                break;<a name="line.720"></a>
<span class="sourceLineNo">721</span>                        case Dataset.ARRAYFLOAT32:<a name="line.721"></a>
<span class="sourceLineNo">722</span>                                if (a instanceof CompoundDataset)<a name="line.722"></a>
<span class="sourceLineNo">723</span>                                        c = new CompoundFloatDataset((CompoundDataset) a);<a name="line.723"></a>
<span class="sourceLineNo">724</span>                                else<a name="line.724"></a>
<span class="sourceLineNo">725</span>                                        c = new CompoundFloatDataset(a);<a name="line.725"></a>
<span class="sourceLineNo">726</span>                                break;<a name="line.726"></a>
<span class="sourceLineNo">727</span>                        case Dataset.ARRAYFLOAT64:<a name="line.727"></a>
<span class="sourceLineNo">728</span>                                if (a instanceof CompoundDataset)<a name="line.728"></a>
<span class="sourceLineNo">729</span>                                        c = new CompoundDoubleDataset((CompoundDataset) a);<a name="line.729"></a>
<span class="sourceLineNo">730</span>                                else<a name="line.730"></a>
<span class="sourceLineNo">731</span>                                        c = new CompoundDoubleDataset(a);<a name="line.731"></a>
<span class="sourceLineNo">732</span>                                break;<a name="line.732"></a>
<span class="sourceLineNo">733</span>                        case Dataset.COMPLEX64:<a name="line.733"></a>
<span class="sourceLineNo">734</span>                                c = new ComplexFloatDataset(a);<a name="line.734"></a>
<span class="sourceLineNo">735</span>                                break;<a name="line.735"></a>
<span class="sourceLineNo">736</span>                        case Dataset.COMPLEX128:<a name="line.736"></a>
<span class="sourceLineNo">737</span>                                c = new ComplexDoubleDataset(a);<a name="line.737"></a>
<span class="sourceLineNo">738</span>                                break;<a name="line.738"></a>
<span class="sourceLineNo">739</span>                        case Dataset.RGB:<a name="line.739"></a>
<span class="sourceLineNo">740</span>                                if (a instanceof CompoundDataset)<a name="line.740"></a>
<span class="sourceLineNo">741</span>                                        c = RGBDataset.createFromCompoundDataset((CompoundDataset) a);<a name="line.741"></a>
<span class="sourceLineNo">742</span>                                else<a name="line.742"></a>
<span class="sourceLineNo">743</span>                                        c = new RGBDataset(a);<a name="line.743"></a>
<span class="sourceLineNo">744</span>                                break;<a name="line.744"></a>
<span class="sourceLineNo">745</span>                        default:<a name="line.745"></a>
<span class="sourceLineNo">746</span>                                utilsLogger.error("Dataset of unknown type!");<a name="line.746"></a>
<span class="sourceLineNo">747</span>                                break;<a name="line.747"></a>
<span class="sourceLineNo">748</span>                        }<a name="line.748"></a>
<span class="sourceLineNo">749</span>                } catch (OutOfMemoryError e) {<a name="line.749"></a>
<span class="sourceLineNo">750</span>                        utilsLogger.error("Not enough memory available to create dataset");<a name="line.750"></a>
<span class="sourceLineNo">751</span>                        throw new OutOfMemoryError("Not enough memory available to create dataset");<a name="line.751"></a>
<span class="sourceLineNo">752</span>                }<a name="line.752"></a>
<span class="sourceLineNo">753</span><a name="line.753"></a>
<span class="sourceLineNo">754</span>                return c;<a name="line.754"></a>
<span class="sourceLineNo">755</span>        }<a name="line.755"></a>
<span class="sourceLineNo">756</span><a name="line.756"></a>
<span class="sourceLineNo">757</span>        /**<a name="line.757"></a>
<span class="sourceLineNo">758</span>         * Copy and cast a dataset<a name="line.758"></a>
<span class="sourceLineNo">759</span>         * <a name="line.759"></a>
<span class="sourceLineNo">760</span>         * @param clazz dataset class<a name="line.760"></a>
<span class="sourceLineNo">761</span>         * @param d<a name="line.761"></a>
<span class="sourceLineNo">762</span>         *            The dataset to be copied<a name="line.762"></a>
<span class="sourceLineNo">763</span>         * @return copied dataset of given type<a name="line.763"></a>
<span class="sourceLineNo">764</span>         */<a name="line.764"></a>
<span class="sourceLineNo">765</span>        public static &lt;T extends Dataset&gt; T copy(Class&lt;T&gt; clazz, final IDataset d) {<a name="line.765"></a>
<span class="sourceLineNo">766</span>                return (T) copy(d, DTypeUtils.getDType(clazz));<a name="line.766"></a>
<span class="sourceLineNo">767</span>        }<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>         * Cast a dataset<a name="line.771"></a>
<span class="sourceLineNo">772</span>         * <a name="line.772"></a>
<span class="sourceLineNo">773</span>         * @param d<a name="line.773"></a>
<span class="sourceLineNo">774</span>         *            The dataset to be cast.<a name="line.774"></a>
<span class="sourceLineNo">775</span>         * @param dtype dataset type<a name="line.775"></a>
<span class="sourceLineNo">776</span>         * @return dataset of given type (or same dataset if already of the right type)<a name="line.776"></a>
<span class="sourceLineNo">777</span>         */<a name="line.777"></a>
<span class="sourceLineNo">778</span>        public static Dataset cast(final IDataset d, final int dtype) {<a name="line.778"></a>
<span class="sourceLineNo">779</span>                Dataset a = convertToDataset(d);<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>                if (a.getDType() == dtype) {<a name="line.781"></a>
<span class="sourceLineNo">782</span>                        return a;<a name="line.782"></a>
<span class="sourceLineNo">783</span>                }<a name="line.783"></a>
<span class="sourceLineNo">784</span>                return copy(d, dtype);<a name="line.784"></a>
<span class="sourceLineNo">785</span>        }<a name="line.785"></a>
<span class="sourceLineNo">786</span><a name="line.786"></a>
<span class="sourceLineNo">787</span>        /**<a name="line.787"></a>
<span class="sourceLineNo">788</span>         * Cast a dataset<a name="line.788"></a>
<span class="sourceLineNo">789</span>         * <a name="line.789"></a>
<span class="sourceLineNo">790</span>         * @param clazz dataset class<a name="line.790"></a>
<span class="sourceLineNo">791</span>         * @param d<a name="line.791"></a>
<span class="sourceLineNo">792</span>         *            The dataset to be cast.<a name="line.792"></a>
<span class="sourceLineNo">793</span>         * @return dataset of given type (or same dataset if already of the right type)<a name="line.793"></a>
<span class="sourceLineNo">794</span>         */<a name="line.794"></a>
<span class="sourceLineNo">795</span>        public static &lt;T extends Dataset&gt; T cast(Class&lt;T&gt; clazz, final IDataset d) {<a name="line.795"></a>
<span class="sourceLineNo">796</span>                return (T) cast(d, DTypeUtils.getDType(clazz));<a name="line.796"></a>
<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
<span class="sourceLineNo">798</span><a name="line.798"></a>
<span class="sourceLineNo">799</span>        /**<a name="line.799"></a>
<span class="sourceLineNo">800</span>         * Cast a dataset<a name="line.800"></a>
<span class="sourceLineNo">801</span>         * <a name="line.801"></a>
<span class="sourceLineNo">802</span>         * @param d<a name="line.802"></a>
<span class="sourceLineNo">803</span>         *            The dataset to be cast.<a name="line.803"></a>
<span class="sourceLineNo">804</span>         * @param repeat repeat elements over item<a name="line.804"></a>
<span class="sourceLineNo">805</span>         * @param dtype dataset type<a name="line.805"></a>
<span class="sourceLineNo">806</span>         * @param isize item size<a name="line.806"></a>
<span class="sourceLineNo">807</span>         */<a name="line.807"></a>
<span class="sourceLineNo">808</span>        public static Dataset cast(final IDataset d, final boolean repeat, final int dtype, final int isize) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>                Dataset a = convertToDataset(d);<a name="line.809"></a>
<span class="sourceLineNo">810</span><a name="line.810"></a>
<span class="sourceLineNo">811</span>                if (a.getDType() == dtype &amp;&amp; a.getElementsPerItem() == isize) {<a name="line.811"></a>
<span class="sourceLineNo">812</span>                        return a;<a name="line.812"></a>
<span class="sourceLineNo">813</span>                }<a name="line.813"></a>
<span class="sourceLineNo">814</span>                if (isize &lt;= 0) {<a name="line.814"></a>
<span class="sourceLineNo">815</span>                        utilsLogger.error("Item size is invalid (&gt;0)");<a name="line.815"></a>
<span class="sourceLineNo">816</span>                        throw new IllegalArgumentException("Item size is invalid (&gt;0)");<a name="line.816"></a>
<span class="sourceLineNo">817</span>                }<a name="line.817"></a>
<span class="sourceLineNo">818</span>                if (isize &gt; 1 &amp;&amp; dtype &lt;= Dataset.FLOAT64) {<a name="line.818"></a>
<span class="sourceLineNo">819</span>                        utilsLogger.error("Item size is inconsistent with dataset type");<a name="line.819"></a>
<span class="sourceLineNo">820</span>                        throw new IllegalArgumentException("Item size is inconsistent with dataset type");<a name="line.820"></a>
<span class="sourceLineNo">821</span>                }<a name="line.821"></a>
<span class="sourceLineNo">822</span><a name="line.822"></a>
<span class="sourceLineNo">823</span>                Dataset c = null;<a name="line.823"></a>
<span class="sourceLineNo">824</span><a name="line.824"></a>
<span class="sourceLineNo">825</span>                try {<a name="line.825"></a>
<span class="sourceLineNo">826</span>                        // copy across the data<a name="line.826"></a>
<span class="sourceLineNo">827</span>                        switch (dtype) {<a name="line.827"></a>
<span class="sourceLineNo">828</span>                        case Dataset.BOOL:<a name="line.828"></a>
<span class="sourceLineNo">829</span>                                c = new BooleanDataset(a);<a name="line.829"></a>
<span class="sourceLineNo">830</span>                                break;<a name="line.830"></a>
<span class="sourceLineNo">831</span>                        case Dataset.INT8:<a name="line.831"></a>
<span class="sourceLineNo">832</span>                                c = new ByteDataset(a);<a name="line.832"></a>
<span class="sourceLineNo">833</span>                                break;<a name="line.833"></a>
<span class="sourceLineNo">834</span>                        case Dataset.INT16:<a name="line.834"></a>
<span class="sourceLineNo">835</span>                                c = new ShortDataset(a);<a name="line.835"></a>
<span class="sourceLineNo">836</span>                                break;<a name="line.836"></a>
<span class="sourceLineNo">837</span>                        case Dataset.INT32:<a name="line.837"></a>
<span class="sourceLineNo">838</span>                                c = new IntegerDataset(a);<a name="line.838"></a>
<span class="sourceLineNo">839</span>                                break;<a name="line.839"></a>
<span class="sourceLineNo">840</span>                        case Dataset.INT64:<a name="line.840"></a>
<span class="sourceLineNo">841</span>                                c = new LongDataset(a);<a name="line.841"></a>
<span class="sourceLineNo">842</span>                                break;<a name="line.842"></a>
<span class="sourceLineNo">843</span>                        case Dataset.ARRAYINT8:<a name="line.843"></a>
<span class="sourceLineNo">844</span>                                c = new CompoundByteDataset(isize, repeat, a);<a name="line.844"></a>
<span class="sourceLineNo">845</span>                                break;<a name="line.845"></a>
<span class="sourceLineNo">846</span>                        case Dataset.ARRAYINT16:<a name="line.846"></a>
<span class="sourceLineNo">847</span>                                c = new CompoundShortDataset(isize, repeat, a);<a name="line.847"></a>
<span class="sourceLineNo">848</span>                                break;<a name="line.848"></a>
<span class="sourceLineNo">849</span>                        case Dataset.ARRAYINT32:<a name="line.849"></a>
<span class="sourceLineNo">850</span>                                c = new CompoundIntegerDataset(isize, repeat, a);<a name="line.850"></a>
<span class="sourceLineNo">851</span>                                break;<a name="line.851"></a>
<span class="sourceLineNo">852</span>                        case Dataset.ARRAYINT64:<a name="line.852"></a>
<span class="sourceLineNo">853</span>                                c = new CompoundLongDataset(isize, repeat, a);<a name="line.853"></a>
<span class="sourceLineNo">854</span>                                break;<a name="line.854"></a>
<span class="sourceLineNo">855</span>                        case Dataset.FLOAT32:<a name="line.855"></a>
<span class="sourceLineNo">856</span>                                c = new FloatDataset(a);<a name="line.856"></a>
<span class="sourceLineNo">857</span>                                break;<a name="line.857"></a>
<span class="sourceLineNo">858</span>                        case Dataset.FLOAT64:<a name="line.858"></a>
<span class="sourceLineNo">859</span>                                c = new DoubleDataset(a);<a name="line.859"></a>
<span class="sourceLineNo">860</span>                                break;<a name="line.860"></a>
<span class="sourceLineNo">861</span>                        case Dataset.ARRAYFLOAT32:<a name="line.861"></a>
<span class="sourceLineNo">862</span>                                c = new CompoundFloatDataset(isize, repeat, a);<a name="line.862"></a>
<span class="sourceLineNo">863</span>                                break;<a name="line.863"></a>
<span class="sourceLineNo">864</span>                        case Dataset.ARRAYFLOAT64:<a name="line.864"></a>
<span class="sourceLineNo">865</span>                                c = new CompoundDoubleDataset(isize, repeat, a);<a name="line.865"></a>
<span class="sourceLineNo">866</span>                                break;<a name="line.866"></a>
<span class="sourceLineNo">867</span>                        case Dataset.COMPLEX64:<a name="line.867"></a>
<span class="sourceLineNo">868</span>                                c = new ComplexFloatDataset(a);<a name="line.868"></a>
<span class="sourceLineNo">869</span>                                break;<a name="line.869"></a>
<span class="sourceLineNo">870</span>                        case Dataset.COMPLEX128:<a name="line.870"></a>
<span class="sourceLineNo">871</span>                                c = new ComplexDoubleDataset(a);<a name="line.871"></a>
<span class="sourceLineNo">872</span>                                break;<a name="line.872"></a>
<span class="sourceLineNo">873</span>                        default:<a name="line.873"></a>
<span class="sourceLineNo">874</span>                                utilsLogger.error("Dataset of unknown type!");<a name="line.874"></a>
<span class="sourceLineNo">875</span>                                break;<a name="line.875"></a>
<span class="sourceLineNo">876</span>                        }<a name="line.876"></a>
<span class="sourceLineNo">877</span>                } catch (OutOfMemoryError e) {<a name="line.877"></a>
<span class="sourceLineNo">878</span>                        utilsLogger.error("Not enough memory available to create dataset");<a name="line.878"></a>
<span class="sourceLineNo">879</span>                        throw new OutOfMemoryError("Not enough memory available to create dataset");<a name="line.879"></a>
<span class="sourceLineNo">880</span>                }<a name="line.880"></a>
<span class="sourceLineNo">881</span><a name="line.881"></a>
<span class="sourceLineNo">882</span>                return c;<a name="line.882"></a>
<span class="sourceLineNo">883</span>        }<a name="line.883"></a>
<span class="sourceLineNo">884</span><a name="line.884"></a>
<span class="sourceLineNo">885</span>        /**<a name="line.885"></a>
<span class="sourceLineNo">886</span>         * Cast array of datasets to a compound dataset<a name="line.886"></a>
<span class="sourceLineNo">887</span>         * <a name="line.887"></a>
<span class="sourceLineNo">888</span>         * @param a<a name="line.888"></a>
<span class="sourceLineNo">889</span>         *            The datasets to be cast.<a name="line.889"></a>
<span class="sourceLineNo">890</span>         */<a name="line.890"></a>
<span class="sourceLineNo">891</span>        public static CompoundDataset cast(final Dataset[] a, final int dtype) {<a name="line.891"></a>
<span class="sourceLineNo">892</span>                CompoundDataset c = null;<a name="line.892"></a>
<span class="sourceLineNo">893</span><a name="line.893"></a>
<span class="sourceLineNo">894</span>                switch (dtype) {<a name="line.894"></a>
<span class="sourceLineNo">895</span>                case Dataset.INT8:<a name="line.895"></a>
<span class="sourceLineNo">896</span>                case Dataset.ARRAYINT8:<a name="line.896"></a>
<span class="sourceLineNo">897</span>                        c = new CompoundByteDataset(a);<a name="line.897"></a>
<span class="sourceLineNo">898</span>                        break;<a name="line.898"></a>
<span class="sourceLineNo">899</span>                case Dataset.INT16:<a name="line.899"></a>
<span class="sourceLineNo">900</span>                case Dataset.ARRAYINT16:<a name="line.900"></a>
<span class="sourceLineNo">901</span>                        c = new CompoundShortDataset(a);<a name="line.901"></a>
<span class="sourceLineNo">902</span>                        break;<a name="line.902"></a>
<span class="sourceLineNo">903</span>                case Dataset.INT32:<a name="line.903"></a>
<span class="sourceLineNo">904</span>                case Dataset.ARRAYINT32:<a name="line.904"></a>
<span class="sourceLineNo">905</span>                        c = new CompoundIntegerDataset(a);<a name="line.905"></a>
<span class="sourceLineNo">906</span>                        break;<a name="line.906"></a>
<span class="sourceLineNo">907</span>                case Dataset.INT64:<a name="line.907"></a>
<span class="sourceLineNo">908</span>                case Dataset.ARRAYINT64:<a name="line.908"></a>
<span class="sourceLineNo">909</span>                        c = new CompoundLongDataset(a);<a name="line.909"></a>
<span class="sourceLineNo">910</span>                        break;<a name="line.910"></a>
<span class="sourceLineNo">911</span>                case Dataset.FLOAT32:<a name="line.911"></a>
<span class="sourceLineNo">912</span>                case Dataset.ARRAYFLOAT32:<a name="line.912"></a>
<span class="sourceLineNo">913</span>                        c = new CompoundFloatDataset(a);<a name="line.913"></a>
<span class="sourceLineNo">914</span>                        break;<a name="line.914"></a>
<span class="sourceLineNo">915</span>                case Dataset.FLOAT64:<a name="line.915"></a>
<span class="sourceLineNo">916</span>                case Dataset.ARRAYFLOAT64:<a name="line.916"></a>
<span class="sourceLineNo">917</span>                        c = new CompoundDoubleDataset(a);<a name="line.917"></a>
<span class="sourceLineNo">918</span>                        break;<a name="line.918"></a>
<span class="sourceLineNo">919</span>                case Dataset.COMPLEX64:<a name="line.919"></a>
<span class="sourceLineNo">920</span>                        if (a.length != 2) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                                throw new IllegalArgumentException("Need two datasets for complex dataset type");<a name="line.921"></a>
<span class="sourceLineNo">922</span>                        }<a name="line.922"></a>
<span class="sourceLineNo">923</span>                        c = new ComplexFloatDataset(a[0], a[1]);<a name="line.923"></a>
<span class="sourceLineNo">924</span>                        break;<a name="line.924"></a>
<span class="sourceLineNo">925</span>                case Dataset.COMPLEX128:<a name="line.925"></a>
<span class="sourceLineNo">926</span>                        if (a.length != 2) {<a name="line.926"></a>
<span class="sourceLineNo">927</span>                                throw new IllegalArgumentException("Need two datasets for complex dataset type");<a name="line.927"></a>
<span class="sourceLineNo">928</span>                        }<a name="line.928"></a>
<span class="sourceLineNo">929</span>                        c = new ComplexDoubleDataset(a[0], a[1]);<a name="line.929"></a>
<span class="sourceLineNo">930</span>                        break;<a name="line.930"></a>
<span class="sourceLineNo">931</span>                default:<a name="line.931"></a>
<span class="sourceLineNo">932</span>                        utilsLogger.error("Dataset of unsupported type!");<a name="line.932"></a>
<span class="sourceLineNo">933</span>                        break;<a name="line.933"></a>
<span class="sourceLineNo">934</span>                }<a name="line.934"></a>
<span class="sourceLineNo">935</span><a name="line.935"></a>
<span class="sourceLineNo">936</span>                return c;<a name="line.936"></a>
<span class="sourceLineNo">937</span>        }<a name="line.937"></a>
<span class="sourceLineNo">938</span><a name="line.938"></a>
<span class="sourceLineNo">939</span>        /**<a name="line.939"></a>
<span class="sourceLineNo">940</span>         * Make a dataset unsigned by promoting it to a wider dataset type and unwrapping the signs<a name="line.940"></a>
<span class="sourceLineNo">941</span>         * of its content<a name="line.941"></a>
<span class="sourceLineNo">942</span>         * @param a<a name="line.942"></a>
<span class="sourceLineNo">943</span>         * @return unsigned dataset or original if it is not an integer dataset<a name="line.943"></a>
<span class="sourceLineNo">944</span>         */<a name="line.944"></a>
<span class="sourceLineNo">945</span>        public static Dataset makeUnsigned(IDataset a) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>                Dataset d = convertToDataset(a);<a name="line.946"></a>
<span class="sourceLineNo">947</span>                int dtype = d.getDType();<a name="line.947"></a>
<span class="sourceLineNo">948</span>                switch (dtype) {<a name="line.948"></a>
<span class="sourceLineNo">949</span>                case Dataset.INT32:<a name="line.949"></a>
<span class="sourceLineNo">950</span>                        d = new LongDataset(d);<a name="line.950"></a>
<span class="sourceLineNo">951</span>                        unwrapUnsigned(d, 32);<a name="line.951"></a>
<span class="sourceLineNo">952</span>                        break;<a name="line.952"></a>
<span class="sourceLineNo">953</span>                case Dataset.INT16:<a name="line.953"></a>
<span class="sourceLineNo">954</span>                        d = new IntegerDataset(d);<a name="line.954"></a>
<span class="sourceLineNo">955</span>                        unwrapUnsigned(d, 16);<a name="line.955"></a>
<span class="sourceLineNo">956</span>                        break;<a name="line.956"></a>
<span class="sourceLineNo">957</span>                case Dataset.INT8:<a name="line.957"></a>
<span class="sourceLineNo">958</span>                        d = new ShortDataset(d);<a name="line.958"></a>
<span class="sourceLineNo">959</span>                        unwrapUnsigned(d, 8);<a name="line.959"></a>
<span class="sourceLineNo">960</span>                        break;<a name="line.960"></a>
<span class="sourceLineNo">961</span>                case Dataset.ARRAYINT32:<a name="line.961"></a>
<span class="sourceLineNo">962</span>                        d = new CompoundLongDataset(d);<a name="line.962"></a>
<span class="sourceLineNo">963</span>                        unwrapUnsigned(d, 32);<a name="line.963"></a>
<span class="sourceLineNo">964</span>                        break;<a name="line.964"></a>
<span class="sourceLineNo">965</span>                case Dataset.ARRAYINT16:<a name="line.965"></a>
<span class="sourceLineNo">966</span>                        d = new CompoundIntegerDataset(d);<a name="line.966"></a>
<span class="sourceLineNo">967</span>                        unwrapUnsigned(d, 16);<a name="line.967"></a>
<span class="sourceLineNo">968</span>                        break;<a name="line.968"></a>
<span class="sourceLineNo">969</span>                case Dataset.ARRAYINT8:<a name="line.969"></a>
<span class="sourceLineNo">970</span>                        d = new CompoundShortDataset(d);<a name="line.970"></a>
<span class="sourceLineNo">971</span>                        unwrapUnsigned(d, 8);<a name="line.971"></a>
<span class="sourceLineNo">972</span>                        break;<a name="line.972"></a>
<span class="sourceLineNo">973</span>                }<a name="line.973"></a>
<span class="sourceLineNo">974</span>                return d;<a name="line.974"></a>
<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
<span class="sourceLineNo">976</span><a name="line.976"></a>
<span class="sourceLineNo">977</span>        /**<a name="line.977"></a>
<span class="sourceLineNo">978</span>         * Unwrap dataset elements so that all elements are unsigned<a name="line.978"></a>
<span class="sourceLineNo">979</span>         * @param a dataset<a name="line.979"></a>
<span class="sourceLineNo">980</span>         * @param bitWidth width of original primitive in bits<a name="line.980"></a>
<span class="sourceLineNo">981</span>         */<a name="line.981"></a>
<span class="sourceLineNo">982</span>        public static void unwrapUnsigned(Dataset a, final int bitWidth) {<a name="line.982"></a>
<span class="sourceLineNo">983</span>                final int dtype = a.getDType();<a name="line.983"></a>
<span class="sourceLineNo">984</span>                final double dv = 1L &lt;&lt; bitWidth;<a name="line.984"></a>
<span class="sourceLineNo">985</span>                final int isize = a.getElementsPerItem();<a name="line.985"></a>
<span class="sourceLineNo">986</span>                IndexIterator it = a.getIterator();<a name="line.986"></a>
<span class="sourceLineNo">987</span><a name="line.987"></a>
<span class="sourceLineNo">988</span>                switch (dtype) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>                case Dataset.BOOL:<a name="line.989"></a>
<span class="sourceLineNo">990</span>                        break;<a name="line.990"></a>
<span class="sourceLineNo">991</span>                case Dataset.INT8:<a name="line.991"></a>
<span class="sourceLineNo">992</span>                        break;<a name="line.992"></a>
<span class="sourceLineNo">993</span>                case Dataset.INT16:<a name="line.993"></a>
<span class="sourceLineNo">994</span>                        ShortDataset sds = (ShortDataset) a;<a name="line.994"></a>
<span class="sourceLineNo">995</span>                        final short soffset = (short) dv;<a name="line.995"></a>
<span class="sourceLineNo">996</span>                        while (it.hasNext()) {<a name="line.996"></a>
<span class="sourceLineNo">997</span>                                final short x = sds.getAbs(it.index);<a name="line.997"></a>
<span class="sourceLineNo">998</span>                                if (x &lt; 0)<a name="line.998"></a>
<span class="sourceLineNo">999</span>                                        sds.setAbs(it.index, (short) (x + soffset));<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                        }<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                        break;<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                case Dataset.INT32:<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                        IntegerDataset ids = (IntegerDataset) a;<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>                        final int ioffset = (int) dv;<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>                        while (it.hasNext()) {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                                final int x = ids.getAbs(it.index);<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                                if (x &lt; 0)<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                                        ids.setAbs(it.index, x + ioffset);<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                        }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                        break;<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                case Dataset.INT64:<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                        LongDataset lds = (LongDataset) a;<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                        final long loffset = (long) dv;<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                        while (it.hasNext()) {<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                                final long x = lds.getAbs(it.index);<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                                if (x &lt; 0)<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                                        lds.setAbs(it.index, x + loffset);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                        }<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                        break;<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                case Dataset.FLOAT32:<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                        FloatDataset fds = (FloatDataset) a;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                        final float foffset = (float) dv;<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        while (it.hasNext()) {<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                                final float x = fds.getAbs(it.index);<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                                if (x &lt; 0)<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                                        fds.setAbs(it.index, x + foffset);<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                        }<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                        break;<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>                case Dataset.FLOAT64:<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                        DoubleDataset dds = (DoubleDataset) a;<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                        final double doffset = dv;<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                        while (it.hasNext()) {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                                final double x = dds.getAbs(it.index);<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                                if (x &lt; 0)<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                                        dds.setAbs(it.index, x + doffset);<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                        }<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                        break;<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                case Dataset.ARRAYINT8:<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                        break;<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                case Dataset.ARRAYINT16:<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                        CompoundShortDataset csds = (CompoundShortDataset) a;<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                        final short csoffset = (short) dv;<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                        final short[] csa = new short[isize];<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                        while (it.hasNext()) {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                                csds.getAbs(it.index, csa);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                                boolean dirty = false;<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>                                for (int i = 0; i &lt; isize; i++) {<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>                                        short x = csa[i];<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>                                        if (x &lt; 0) {<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>                                                csa[i] = (short) (x + csoffset);<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>                                                dirty = true;<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                                        }<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                                }<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>                                if (dirty)<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                                        csds.setAbs(it.index, csa);<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>                        }<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                        break;<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>                case Dataset.ARRAYINT32:<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                        CompoundIntegerDataset cids = (CompoundIntegerDataset) a;<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                        final int cioffset = (int) dv;<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                        final int[] cia = new int[isize];<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>                        while (it.hasNext()) {<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>                                cids.getAbs(it.index, cia);<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>                                boolean dirty = false;<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>                                for (int i = 0; i &lt; isize; i++) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                                        int x = cia[i];<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                                        if (x &lt; 0) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                                                cia[i] = x + cioffset;<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                                                dirty = true;<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>                                if (dirty)<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>                                        cids.setAbs(it.index, cia);<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>                        }<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>                        break;<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>                case Dataset.ARRAYINT64:<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>                        CompoundLongDataset clds = (CompoundLongDataset) a;<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                        final long cloffset = (long) dv;<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                        final long[] cla = new long[isize];<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>                        while (it.hasNext()) {<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                                clds.getAbs(it.index, cla);<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>                                boolean dirty = false;<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>                                for (int i = 0; i &lt; isize; i++) {<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                                        long x = cla[i];<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>                                        if (x &lt; 0) {<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>                                                cla[i] = x + cloffset;<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>                                                dirty = true;<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                                        }<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                                }<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                                if (dirty)<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                                        clds.setAbs(it.index, cla);<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                        }<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                        break;<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                default:<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                        utilsLogger.error("Dataset of unsupported type for this method");<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>                        break;<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                }<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>        }<a name="line.1098"></a>
<span class="sourceLineNo">1099</span><a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        /**<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>         * @param rows<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>         * @param cols<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>         * @param offset<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>         * @param dtype<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>         * @return a new 2d dataset of given shape and type, filled with ones on the (offset) diagonal<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>         */<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>        public static Dataset eye(final int rows, final int cols, final int offset, final int dtype) {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                int[] shape = new int[] {rows, cols};<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                @SuppressWarnings("deprecation")<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                Dataset a = DatasetFactory.zeros(shape, dtype);<a name="line.1110"></a>
<span class="sourceLineNo">1111</span><a name="line.1111"></a>
<span class="sourceLineNo">1112</span>                int[] pos = new int[] {0, offset};<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>                while (pos[1] &lt; 0) {<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>                        pos[0]++;<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>                        pos[1]++;<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                }<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                while (pos[0] &lt; rows &amp;&amp; pos[1] &lt; cols) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                        a.set(1, pos);<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                        pos[0]++;<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                        pos[1]++;<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                }<a name="line.1121"></a>
<span class="sourceLineNo">1122</span><a name="line.1122"></a>
<span class="sourceLineNo">1123</span>                return a;<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>        }<a name="line.1124"></a>
<span class="sourceLineNo">1125</span><a name="line.1125"></a>
<span class="sourceLineNo">1126</span>        /**<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>         * Create a (off-)diagonal matrix from items in dataset<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>         * @param a<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>         * @param offset<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>         * @return diagonal matrix<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>         */<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>        @SuppressWarnings("deprecation")<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>        public static &lt;T extends Dataset&gt; T diag(final T a, final int offset) {<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                final int dtype = a.getDType();<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                final int rank = a.getRank();<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                final int is = a.getElementsPerItem();<a name="line.1136"></a>
<span class="sourceLineNo">1137</span><a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                if (rank == 0 || rank &gt; 2) {<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                        utilsLogger.error("Rank of dataset should be one or two");<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                        throw new IllegalArgumentException("Rank of dataset should be one or two");<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span><a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                Dataset result;<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                final int[] shape = a.getShapeRef();<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                if (rank == 1) {<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                        int side = shape[0] + Math.abs(offset);<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                        int[] pos = new int[] {side, side};<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                        result = DatasetFactory.zeros(is, pos, dtype);<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                        if (offset &gt;= 0) {<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>                                pos[0] = 0;<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                                pos[1] = offset;<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                        } else {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>                                pos[0] = -offset;<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                                pos[1] = 0;<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>                        }<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                        int i = 0;<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                        while (pos[0] &lt; side &amp;&amp; pos[1] &lt; side) {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                                result.set(a.getObject(i++), pos);<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                                pos[0]++;<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                                pos[1]++;<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                        }<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                } else {<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                        int side = offset &gt;= 0 ? Math.min(shape[0], shape[1]-offset) : Math.min(shape[0]+offset, shape[1]);<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>                        if (side &lt; 0)<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>                                side = 0;<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>                        result = DatasetFactory.zeros(is, new int[] {side}, dtype);<a name="line.1166"></a>
<span class="sourceLineNo">1167</span><a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                        if (side &gt; 0) {<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                                int[] pos = offset &gt;= 0 ? new int[] { 0, offset } : new int[] { -offset, 0 };<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                                int i = 0;<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>                                while (pos[0] &lt; shape[0] &amp;&amp; pos[1] &lt; shape[1]) {<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                                        result.set(a.getObject(pos), i++);<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                                        pos[0]++;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                                        pos[1]++;<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                                }<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>                return (T) result;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>        }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span><a name="line.1181"></a>
<span class="sourceLineNo">1182</span>        /**<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>         * Slice (or fully load), if necessary, a lazy dataset, otherwise take a slice view and<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>         * convert to our dataset implementation. If a slice is necessary, this may cause resource<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>         * problems when used on large datasets and throw runtime exceptions<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>         * @param lazy can be null<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>         * @return Converted dataset or null<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>         * @throws DatasetException<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>         */<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>        public static Dataset sliceAndConvertLazyDataset(ILazyDataset lazy) throws DatasetException {<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                if (lazy == null)<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                        return null;<a name="line.1192"></a>
<span class="sourceLineNo">1193</span><a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                IDataset data = lazy instanceof IDataset ? (IDataset) lazy.getSliceView() : lazy.getSlice();<a name="line.1194"></a>
<span class="sourceLineNo">1195</span><a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                return convertToDataset(data);<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>        }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span><a name="line.1198"></a>
<span class="sourceLineNo">1199</span>        /**<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>         * Convert (if necessary) a dataset obeying the interface to our implementation<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>         * @param data can be null<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>         * @return Converted dataset or null<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>         */<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>        public static Dataset convertToDataset(IDataset data) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                if (data == null)<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                        return null;<a name="line.1206"></a>
<span class="sourceLineNo">1207</span><a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                if (data instanceof Dataset) {<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                        return (Dataset) data;<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span><a name="line.1211"></a>
<span class="sourceLineNo">1212</span>                int dtype = DTypeUtils.getDType(data);<a name="line.1212"></a>
<span class="sourceLineNo">1213</span><a name="line.1213"></a>
<span class="sourceLineNo">1214</span>                final int isize = data.getElementsPerItem();<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>                if (isize &lt;= 0) {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                        throw new IllegalArgumentException("Datasets with " + isize + " elements per item not supported");<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>                @SuppressWarnings("deprecation")<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>                final Dataset result = DatasetFactory.zeros(isize, data.getShape(), dtype);<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                result.setName(data.getName());<a name="line.1221"></a>
<span class="sourceLineNo">1222</span><a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                final IndexIterator it = result.getIterator(true);<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                final int[] pos = it.getPos();<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                switch (dtype) {<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                case Dataset.BOOL:<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                        while (it.hasNext()) {<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                                result.setObjectAbs(it.index, data.getBoolean(pos));<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                        }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                        break;<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                case Dataset.INT8:<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                        while (it.hasNext()) {<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                result.setObjectAbs(it.index, data.getByte(pos));<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                        }<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                        break;<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                case Dataset.INT16:<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                        while (it.hasNext()) {<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                                result.setObjectAbs(it.index, data.getShort(pos));<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                        }<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                        break;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>                case Dataset.INT32:<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>                        while (it.hasNext()) {<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>                                result.setObjectAbs(it.index, data.getInt(pos));<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>                        }<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>                        break;<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>                case Dataset.INT64:<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>                        while (it.hasNext()) {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                                result.setObjectAbs(it.index, data.getLong(pos));<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                        }<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                        break;<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                case Dataset.FLOAT32:<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>                        while (it.hasNext()) {<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>                                result.setObjectAbs(it.index, data.getFloat(pos));<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>                        }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>                        break;<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                case Dataset.FLOAT64:<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                        while (it.hasNext()) {<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>                                result.setObjectAbs(it.index, data.getDouble(pos));<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>                        }<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>                        break;<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                default:<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>                        while (it.hasNext()) {<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>                                result.setObjectAbs(it.index, data.getObject(pos));<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                        }<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>                        break;<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>                }<a name="line.1266"></a>
<span class="sourceLineNo">1267</span><a name="line.1267"></a>
<span class="sourceLineNo">1268</span>                result.setErrors(data.getErrors());<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>                return result;<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>        }<a name="line.1270"></a>
<span class="sourceLineNo">1271</span><a name="line.1271"></a>
<span class="sourceLineNo">1272</span>        /**<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>         * Create a compound dataset from given datasets<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>         * @param datasets<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>         * @return compound dataset or null if none given<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>         */<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>        public static CompoundDataset createCompoundDataset(final Dataset... datasets) {<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>                if (datasets == null || datasets.length == 0)<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>                        return null;<a name="line.1279"></a>
<span class="sourceLineNo">1280</span><a name="line.1280"></a>
<span class="sourceLineNo">1281</span>                return createCompoundDataset(datasets[0].getDType(), datasets);<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>        /**<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>         * Create a compound dataset from given datasets<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>         * @param dtype<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>         * @param datasets<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>         * @return compound dataset or null if none given<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>         */<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>        public static CompoundDataset createCompoundDataset(final int dtype, final Dataset... datasets) {<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                if (datasets == null || datasets.length == 0)<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                        return null;<a name="line.1292"></a>
<span class="sourceLineNo">1293</span><a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                switch (dtype) {<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                case Dataset.INT8:<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>                case Dataset.ARRAYINT8:<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                        return new CompoundByteDataset(datasets);<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                case Dataset.INT16:<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                case Dataset.ARRAYINT16:<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>                        return new CompoundShortDataset(datasets);<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                case Dataset.INT32:<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>                case Dataset.ARRAYINT32:<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>                        return new CompoundIntegerDataset(datasets);<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>                case Dataset.INT64:<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                case Dataset.ARRAYINT64:<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                        return new CompoundLongDataset(datasets);<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                case Dataset.FLOAT32:<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                case Dataset.ARRAYFLOAT32:<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                        return new CompoundFloatDataset(datasets);<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>                case Dataset.FLOAT64:<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>                case Dataset.ARRAYFLOAT64:<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                        return new CompoundDoubleDataset(datasets);<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                case Dataset.COMPLEX64:<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                case Dataset.COMPLEX128:<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>                        if (datasets.length &gt; 2) {<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>                                utilsLogger.error("At most two datasets are allowed");<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>                                throw new IllegalArgumentException("At most two datasets are allowed");<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>                        } else if (datasets.length == 2) {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                                return dtype == Dataset.COMPLEX64 ? new ComplexFloatDataset(datasets[0], datasets[1]) : new ComplexDoubleDataset(datasets[0], datasets[1]);<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>                        }<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                        return dtype == Dataset.COMPLEX64 ? new ComplexFloatDataset(datasets[0]) : new ComplexDoubleDataset(datasets[0]);<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                case Dataset.RGB:<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>                        if (datasets.length == 1) {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>                                return new RGBDataset(datasets[0]);<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>                        } else if (datasets.length == 3) {<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>                                return new RGBDataset(datasets[0], datasets[1], datasets[2]);<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>                        } else {<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>                                utilsLogger.error("Only one or three datasets are allowed to create a RGB dataset");<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>                                throw new IllegalArgumentException("Only one or three datasets are allowed to create a RGB dataset");<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>                        }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>                default:<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>                        utilsLogger.error("Dataset type not supported for this operation");<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>                        throw new UnsupportedOperationException("Dataset type not supported");<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>                }<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>        }<a name="line.1335"></a>
<span class="sourceLineNo">1336</span><a name="line.1336"></a>
<span class="sourceLineNo">1337</span>        /**<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>         * Create a compound dataset from given datasets<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>         * @param clazz dataset class<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>         * @param datasets<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>         * @return compound dataset or null if none given<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>         */<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>        public static &lt;T extends CompoundDataset&gt; T createCompoundDataset(Class&lt;T&gt; clazz, final Dataset... datasets) {<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>                return (T) createCompoundDataset(DTypeUtils.getDType(clazz), datasets);<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        }<a name="line.1345"></a>
<span class="sourceLineNo">1346</span><a name="line.1346"></a>
<span class="sourceLineNo">1347</span>        /**<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>         * Create a compound dataset from given dataset<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>         * @param dataset<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>         * @param itemSize<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>         * @return compound dataset<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>         */<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        public static CompoundDataset createCompoundDataset(final Dataset dataset, final int itemSize) {<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>                int[] shape = dataset.getShapeRef();<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>                int[] nshape = shape;<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>                if (shape != null &amp;&amp; itemSize &gt; 1) {<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>                        int size = ShapeUtils.calcSize(shape);<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>                        if (size % itemSize != 0) {<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>                                throw new IllegalArgumentException("Input dataset has number of items that is not a multiple of itemSize");<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>                        }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>                        int d = shape.length;<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>                        int l = 1;<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>                        while (--d &gt;= 0) {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>                                l *= shape[d];<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>                                if (l % itemSize == 0) {<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>                                        break;<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>                                }<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>                        }<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>                        assert d &gt;= 0;<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>                        nshape = new int[d + 1];<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>                        for (int i = 0; i &lt; d; i++) {<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>                                nshape[i] = shape[i];<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>                        }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>                        nshape[d] = l / itemSize;<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>                }<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>                switch (dataset.getDType()) {<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>                case Dataset.INT8:<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>                        return new CompoundByteDataset(itemSize, (byte[]) dataset.getBuffer(), nshape);<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>                case Dataset.INT16:<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>                        return new CompoundShortDataset(itemSize, (short[]) dataset.getBuffer(), nshape);<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>                case Dataset.INT32:<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>                        return new CompoundIntegerDataset(itemSize, (int[]) dataset.getBuffer(), nshape);<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                case Dataset.INT64:<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                        return new CompoundLongDataset(itemSize, (long[]) dataset.getBuffer(), nshape);<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>                case Dataset.FLOAT32:<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                        return new CompoundFloatDataset(itemSize, (float[]) dataset.getBuffer(), nshape);<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                case Dataset.FLOAT64:<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                        return new CompoundDoubleDataset(itemSize, (double[]) dataset.getBuffer(), nshape);<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>                default:<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>                        utilsLogger.error("Dataset type not supported for this operation");<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>                        throw new UnsupportedOperationException("Dataset type not supported");<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>                }<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>        }<a name="line.1393"></a>
<span class="sourceLineNo">1394</span><a name="line.1394"></a>
<span class="sourceLineNo">1395</span>        <a name="line.1395"></a>
<span class="sourceLineNo">1396</span>        /**<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>         * Create a compound dataset by using last axis as elements of an item<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>         * @param a<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>         * @param shareData if true, then share data<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>         * @return compound dataset<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>         */<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>        public static CompoundDataset createCompoundDatasetFromLastAxis(final Dataset a, final boolean shareData) {<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>                switch (a.getDType()) {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>                case Dataset.INT8:<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>                        return CompoundByteDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>                case Dataset.INT16:<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                        return CompoundShortDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                case Dataset.INT32:<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>                        return CompoundIntegerDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>                case Dataset.INT64:<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                        return CompoundLongDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                case Dataset.FLOAT32:<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>                        return CompoundFloatDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                case Dataset.FLOAT64:<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>                        return CompoundDoubleDataset.createCompoundDatasetWithLastDimension(a, shareData);<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>                default:<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>                        utilsLogger.error("Dataset type not supported for this operation");<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>                        throw new UnsupportedOperationException("Dataset type not supported");<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                }<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>         * Create a dataset from a compound dataset by using elements of an item as last axis<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>         * &lt;p&gt;<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>         * In the case where the number of elements is one, the last axis is squeezed out.<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>         * @param a<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>         * @param shareData if true, then share data<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>         * @return non-compound dataset<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>         */<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        public static Dataset createDatasetFromCompoundDataset(final CompoundDataset a, final boolean shareData) {<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>                return a.asNonCompoundDataset(shareData);<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        }<a name="line.1432"></a>
<span class="sourceLineNo">1433</span><a name="line.1433"></a>
<span class="sourceLineNo">1434</span>        /**<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>         * Create a copy that has been coerced to an appropriate dataset type<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>         * depending on the input object's class<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>         *<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>         * @param a<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>         * @param obj<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>         * @return coerced copy of dataset<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>         */<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>        public static Dataset coerce(Dataset a, Object obj) {<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>                final int dt = a.getDType();<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>                final int ot = DTypeUtils.getDTypeFromClass(obj.getClass());<a name="line.1444"></a>
<span class="sourceLineNo">1445</span><a name="line.1445"></a>
<span class="sourceLineNo">1446</span>                return cast(a.clone(), DTypeUtils.getBestDType(dt, ot));<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
<span class="sourceLineNo">1448</span><a name="line.1448"></a>
<span class="sourceLineNo">1449</span>        /**<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>         * Function that returns a normalised dataset which is bounded between 0 and 1<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>         * @param a dataset<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>         * @return normalised dataset<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>         */<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>        public static Dataset norm(Dataset a) {<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>                double amin = a.min().doubleValue();<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>                double aptp = a.max().doubleValue() - amin;<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>                Dataset temp = Maths.subtract(a, amin);<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>                temp.idivide(aptp);<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>                return temp;<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>        }<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>         * Function that returns a normalised compound dataset which is bounded between 0 and 1. There<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>         * are (at least) two ways to normalise a compound dataset: per element - extrema for each element<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>         * in a compound item is used, i.e. many min/max pairs; over all elements - extrema for all elements<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>         * is used, i.e. one min/max pair.<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>         * @param a dataset<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>         * @param overAllElements if true, then normalise over all elements in each item<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>         * @return normalised dataset<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>         */<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>        public static CompoundDataset norm(CompoundDataset a, boolean overAllElements) {<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>                double[] amin = a.minItem();<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>                double[] amax = a.maxItem();<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>                final int is = a.getElementsPerItem();<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>                Dataset result;<a name="line.1475"></a>
<span class="sourceLineNo">1476</span><a name="line.1476"></a>
<span class="sourceLineNo">1477</span>                if (overAllElements) {<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                        Arrays.sort(amin);<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>                        Arrays.sort(amax);<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>                        double aptp = amax[0] - amin[0];<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>                        <a name="line.1481"></a>
<span class="sourceLineNo">1482</span>                        result = Maths.subtract(a, amin[0]);<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>                        result.idivide(aptp);<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>                } else {<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>                        double[] aptp = new double[is];<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>                        for (int j = 0; j &lt; is; j++) {<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>                                aptp[j] = amax[j] - amin[j];<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>                        }<a name="line.1488"></a>
<span class="sourceLineNo">1489</span><a name="line.1489"></a>
<span class="sourceLineNo">1490</span>                        result = Maths.subtract(a, amin);<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>                        result.idivide(aptp);<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>                }<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>                return (CompoundDataset) result;<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>        }<a name="line.1494"></a>
<span class="sourceLineNo">1495</span><a name="line.1495"></a>
<span class="sourceLineNo">1496</span>        /**<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>         * Function that returns a normalised dataset which is bounded between 0 and 1<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>         * and has been distributed on a log10 scale<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>         * @param a dataset<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>         * @return normalised dataset<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>         */<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>        public static Dataset lognorm(Dataset a) {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>                double amin = a.min().doubleValue();<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>                double aptp = Math.log10(a.max().doubleValue() - amin + 1.);<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>                Dataset temp = Maths.subtract(a, amin - 1.);<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>                temp = Maths.log10(temp);<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>                temp = Maths.divide(temp, aptp);<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>                return temp;<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>        /**<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>         * Function that returns a normalised dataset which is bounded between 0 and 1<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>         * and has been distributed on a natural log scale<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>         * @param a dataset<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>         * @return normalised dataset<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>         */<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>        public static Dataset lnnorm(Dataset a) {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                double amin = a.min().doubleValue();<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>                double aptp = Math.log(a.max().doubleValue() - amin + 1.);<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>                Dataset temp = Maths.subtract(a, amin - 1.);<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>                temp = Maths.log(temp);<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>                temp = Maths.divide(temp, aptp);<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                return temp;<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>        /**<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>         * Construct a list of datasets where each represents a coordinate varying over the hypergrid<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>         * formed by the input list of axes<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>         * <a name="line.1529"></a>
<span class="sourceLineNo">1530</span>         * @param axes an array of 1D datasets representing axes<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>         * @return a list of coordinate datasets<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>         */<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>        public static List&lt;Dataset&gt; meshGrid(final Dataset... axes) {<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>                List&lt;Dataset&gt; result = new ArrayList&lt;Dataset&gt;();<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>                int rank = axes.length;<a name="line.1535"></a>
<span class="sourceLineNo">1536</span><a name="line.1536"></a>
<span class="sourceLineNo">1537</span>                if (rank &lt; 2) {<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>                        utilsLogger.error("Two or more axes datasets are required");<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>                        throw new IllegalArgumentException("Two or more axes datasets are required");<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>                }<a name="line.1540"></a>
<span class="sourceLineNo">1541</span><a name="line.1541"></a>
<span class="sourceLineNo">1542</span>                int[] nshape = new int[rank];<a name="line.1542"></a>
<span class="sourceLineNo">1543</span><a name="line.1543"></a>
<span class="sourceLineNo">1544</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>                        Dataset axis = axes[i];<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>                        if (axis.getRank() != 1) {<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>                                utilsLogger.error("Given axis is not 1D");<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>                                throw new IllegalArgumentException("Given axis is not 1D");<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>                        }<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>                        nshape[i] = axis.getSize();<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>                }<a name="line.1551"></a>
<span class="sourceLineNo">1552</span><a name="line.1552"></a>
<span class="sourceLineNo">1553</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                        Dataset axis = axes[i];<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>                        @SuppressWarnings("deprecation")<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>                        Dataset coord = DatasetFactory.zeros(nshape, axis.getDType());<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>                        result.add(coord);<a name="line.1557"></a>
<span class="sourceLineNo">1558</span><a name="line.1558"></a>
<span class="sourceLineNo">1559</span>                        final int alen = axis.getSize();<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>                        for (int j = 0; j &lt; alen; j++) {<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>                                final Object obj = axis.getObjectAbs(j);<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>                                PositionIterator pi = coord.getPositionIterator(i);<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>                                final int[] pos = pi.getPos();<a name="line.1563"></a>
<span class="sourceLineNo">1564</span><a name="line.1564"></a>
<span class="sourceLineNo">1565</span>                                pos[i] = j;<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>                                while (pi.hasNext()) {<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>                                        coord.set(obj, pos);<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>                                }<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>                        }<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>                return result;<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>        }<a name="line.1573"></a>
<span class="sourceLineNo">1574</span><a name="line.1574"></a>
<span class="sourceLineNo">1575</span>        /**<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>         * Generate an index dataset for given dataset where sub-datasets contain index values<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>         *<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>         * @return an index dataset<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>         */<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>        public static IntegerDataset indices(int... shape) {<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>                // now create another dataset to plot against<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>                final int rank = shape.length;<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>                int[] nshape = new int[rank+1];<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>                nshape[0] = rank;<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>                        nshape[i+1] = shape[i];<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>                }<a name="line.1587"></a>
<span class="sourceLineNo">1588</span><a name="line.1588"></a>
<span class="sourceLineNo">1589</span>                IntegerDataset index = new IntegerDataset(nshape);<a name="line.1589"></a>
<span class="sourceLineNo">1590</span><a name="line.1590"></a>
<span class="sourceLineNo">1591</span>                if (rank == 1) {<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>                        final int alen = shape[0];<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>                        int[] pos = new int[2];<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>                        for (int j = 0; j &lt; alen; j++) {<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>                                pos[1] = j;<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>                                index.set(j, pos);<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>                        }<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>                } else {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>                        for (int i = 1; i &lt;= rank; i++) {<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>                                final int alen = nshape[i];<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>                                for (int j = 0; j &lt; alen; j++) {<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>                                        PositionIterator pi = index.getPositionIterator(0, i);<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>                                        final int[] pos = pi.getPos();<a name="line.1603"></a>
<span class="sourceLineNo">1604</span><a name="line.1604"></a>
<span class="sourceLineNo">1605</span>                                        pos[0] = i-1;<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>                                        pos[i] = j;<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>                                        while (pi.hasNext()) {<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>                                                index.set(j, pos);<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>                                        }<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>                }<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>                return index;<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>        }<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>         * Get the centroid value of a dataset, this function works out the centroid in every direction<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>         * <a name="line.1618"></a>
<span class="sourceLineNo">1619</span>         * @param a<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>         *            the dataset to be analysed<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>         * @param bases the optional array of base coordinates to use as weights.<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>         * This defaults to the mid-point of indices<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>         * @return a double array containing the centroid for each dimension<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>         */<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>        public static double[] centroid(Dataset a, Dataset... bases) {<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                int rank = a.getRank();<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                if (bases.length &gt; 0 &amp;&amp; bases.length != rank) {<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                        throw new IllegalArgumentException("Number of bases must be zero or match rank of dataset");<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                }<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                <a name="line.1630"></a>
<span class="sourceLineNo">1631</span>                int[] shape = a.getShapeRef();<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>                if (bases.length == rank) {<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>                                Dataset b = bases[i];<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>                                if (b.getRank() != 1 &amp;&amp; b.getSize() != shape[i]) {<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>                                        throw new IllegalArgumentException("A base does not have shape to match given dataset");<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>                                }<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>                        }<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                }<a name="line.1639"></a>
<span class="sourceLineNo">1640</span><a name="line.1640"></a>
<span class="sourceLineNo">1641</span>                double[] dc = new double[rank];<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                if (rank == 0)<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>                        return dc;<a name="line.1643"></a>
<span class="sourceLineNo">1644</span><a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                final PositionIterator iter = new PositionIterator(shape);<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                final int[] pos = iter.getPos();<a name="line.1646"></a>
<span class="sourceLineNo">1647</span><a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                double tsum = 0.0;<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                while (iter.hasNext()) {<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>                        double val = a.getDouble(pos);<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>                        tsum += val;<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>                        for (int d = 0; d &lt; rank; d++) {<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>                                Dataset b = bases.length == 0 ? null : bases[d];<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                                if (b == null) {<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>                                        dc[d] += (pos[d] + 0.5) * val;<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>                                } else {<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>                                        dc[d] += b.getElementDoubleAbs(pos[d]) * val;<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>                                }<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>                        }<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>                for (int d = 0; d &lt; rank; d++) {<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>                        dc[d] /= tsum;<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>                }<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>                return dc;<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>        }<a name="line.1666"></a>
<span class="sourceLineNo">1667</span><a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        /**<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>         * Find linearly-interpolated crossing points where the given dataset crosses the given value<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>         * <a name="line.1670"></a>
<span class="sourceLineNo">1671</span>         * @param d<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>         * @param value<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>         * @return list of interpolated indices<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>         */<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>        public static List&lt;Double&gt; crossings(Dataset d, double value) {<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>                if (d.getRank() != 1) {<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>                        utilsLogger.error("Only 1d datasets supported");<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>                        throw new UnsupportedOperationException("Only 1d datasets supported");<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>                }<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>                List&lt;Double&gt; results = new ArrayList&lt;Double&gt;();<a name="line.1680"></a>
<span class="sourceLineNo">1681</span><a name="line.1681"></a>
<span class="sourceLineNo">1682</span>                // run through all pairs of points on the line and see if value lies within<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>                IndexIterator it = d.getIterator();<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>                double y1, y2;<a name="line.1684"></a>
<span class="sourceLineNo">1685</span><a name="line.1685"></a>
<span class="sourceLineNo">1686</span>                y2 = it.hasNext() ? y2 = d.getElementDoubleAbs(it.index) : 0;<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>                double x = 1;<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>                while (it.hasNext()) {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>                        y1 = y2;<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>                        y2 = d.getElementDoubleAbs(it.index);<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>                        // check if value lies within pair [y1, y2]<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>                        if ((y1 &lt;= value &amp;&amp; value &lt; y2) || (y1 &gt; value &amp;&amp; y2 &lt;= value)) {<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>                                final double f = (value - y2)/(y2 - y1); // negative distance from right to left<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>                                results.add(x + f);<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>                        }<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>                        x++;<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>                }<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>                if (y2 == value) { // add end point of it intersects<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>                        results.add(x);<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>                }<a name="line.1700"></a>
<span class="sourceLineNo">1701</span><a name="line.1701"></a>
<span class="sourceLineNo">1702</span>                return results;<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
<span class="sourceLineNo">1704</span><a name="line.1704"></a>
<span class="sourceLineNo">1705</span>        /**<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>         * Find x values of all the crossing points of the dataset with the given y value<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>         * <a name="line.1707"></a>
<span class="sourceLineNo">1708</span>         * @param xAxis<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>         *            Dataset of the X axis that needs to be looked at<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>         * @param yAxis<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>         *            Dataset of the Y axis that needs to be looked at<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>         * @param yValue<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>         *            The y value the X values are required for<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>         * @return An list of doubles containing all the X coordinates of where the line crosses<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>         */<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        public static List&lt;Double&gt; crossings(Dataset xAxis, Dataset yAxis, double yValue) {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>                List&lt;Double&gt; results = new ArrayList&lt;Double&gt;();<a name="line.1717"></a>
<span class="sourceLineNo">1718</span><a name="line.1718"></a>
<span class="sourceLineNo">1719</span>                List&lt;Double&gt; indices = crossings(yAxis, yValue);<a name="line.1719"></a>
<span class="sourceLineNo">1720</span><a name="line.1720"></a>
<span class="sourceLineNo">1721</span>                for (double xi : indices) {<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>                        results.add(Maths.interpolate(xAxis, xi));<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>                }<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>                return results;<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>        }<a name="line.1725"></a>
<span class="sourceLineNo">1726</span><a name="line.1726"></a>
<span class="sourceLineNo">1727</span>        /**<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>         * Function that uses the crossings function but prunes the result, so that multiple crossings within a<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>         * certain proportion of the overall range of the x values<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>         * <a name="line.1730"></a>
<span class="sourceLineNo">1731</span>         * @param xAxis<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>         *            Dataset of the X axis<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>         * @param yAxis<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>         *            Dataset of the Y axis<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>         * @param yValue<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>         *            The y value the x values are required for<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>         * @param xRangeProportion<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>         *            The proportion of the overall x spread used to prune result<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>         * @return A list containing all the unique crossing points<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>         */<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>        public static List&lt;Double&gt; crossings(Dataset xAxis, Dataset yAxis, double yValue, double xRangeProportion) {<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>                // get the values found<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>                List&lt;Double&gt; vals = crossings(xAxis, yAxis, yValue);<a name="line.1743"></a>
<span class="sourceLineNo">1744</span><a name="line.1744"></a>
<span class="sourceLineNo">1745</span>                // use the proportion to calculate the error spacing<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>                double error = xRangeProportion * xAxis.peakToPeak().doubleValue();<a name="line.1746"></a>
<span class="sourceLineNo">1747</span><a name="line.1747"></a>
<span class="sourceLineNo">1748</span>                int i = 0;<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>                // now go through and check for groups of three crossings which are all<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>                // within the boundaries<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>                while (i &lt; vals.size() - 3) {<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>                        double v1 = Math.abs(vals.get(i) - vals.get(i + 2));<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>                        if (v1 &lt; error) {<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>                                // these 3 points should be treated as one<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>                                // make the first point equal to the average of them all<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>                                vals.set(i + 2, ((vals.get(i) + vals.get(i + 1) + vals.get(i + 2)) / 3.0));<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>                                // remove the other offending points<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>                                vals.remove(i);<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>                                vals.remove(i);<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>                        } else {<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>                                i++;<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>                        }<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>                }<a name="line.1763"></a>
<span class="sourceLineNo">1764</span><a name="line.1764"></a>
<span class="sourceLineNo">1765</span>                // once the thinning process has been completed, return the pruned list<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>                return vals;<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>        }<a name="line.1767"></a>
<span class="sourceLineNo">1768</span><a name="line.1768"></a>
<span class="sourceLineNo">1769</span>        // recursive function<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>        private static void setRow(Object row, Dataset a, int... pos) {<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>                final int l = Array.getLength(row);<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>                final int rank = pos.length;<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>                final int[] npos = Arrays.copyOf(pos, rank+1);<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>                Object r;<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>                if (rank+1 &lt; a.getRank()) {<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>                        for (int i = 0; i &lt; l; i++) {<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>                                npos[rank] = i;<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>                                r = Array.get(row, i);<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>                                setRow(r, a, npos);<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>                        }<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>                } else {<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>                        for (int i = 0; i &lt; l; i++) {<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                                npos[rank] = i;<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>                                r = a.getObject(npos);<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                                Array.set(row, i, r);<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>        }<a name="line.1788"></a>
<span class="sourceLineNo">1789</span><a name="line.1789"></a>
<span class="sourceLineNo">1790</span>        /**<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>         * Create Java array (of arrays) from dataset<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>         * @param a dataset<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>         * @return Java array (of arrays...)<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>         */<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>        public static Object createJavaArray(Dataset a) {<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>                if (a.getElementsPerItem() &gt; 1) {<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>                        a = createDatasetFromCompoundDataset((CompoundDataset) a, true);<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>                }<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>                Object matrix;<a name="line.1799"></a>
<span class="sourceLineNo">1800</span><a name="line.1800"></a>
<span class="sourceLineNo">1801</span>                switch (a.getDType()) {<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>                case Dataset.BOOL:<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>                        matrix = Array.newInstance(boolean.class, a.getShape());<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>                        break;<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>                case Dataset.INT8:<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>                        matrix = Array.newInstance(byte.class, a.getShape());<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>                        break;<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>                case Dataset.INT16:<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                        matrix = Array.newInstance(short.class, a.getShape());<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>                        break;<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>                case Dataset.INT32:<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>                        matrix = Array.newInstance(int.class, a.getShape());<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                        break;<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>                case Dataset.INT64:<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>                        matrix = Array.newInstance(long.class, a.getShape());<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>                        break;<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                case Dataset.FLOAT32:<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>                        matrix = Array.newInstance(float.class, a.getShape());<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>                        break;<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>                case Dataset.FLOAT64:<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                        matrix = Array.newInstance(double.class, a.getShape());<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>                        break;<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>                default:<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>                        utilsLogger.error("Dataset type not supported");<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                        throw new IllegalArgumentException("Dataset type not supported");<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                }<a name="line.1826"></a>
<span class="sourceLineNo">1827</span><a name="line.1827"></a>
<span class="sourceLineNo">1828</span>                // populate matrix<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>                setRow(matrix, a);<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>                return matrix;<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>        }<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>        <a name="line.1832"></a>
<span class="sourceLineNo">1833</span>        /**<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>         * Removes NaNs and infinities from floating point datasets.<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>         * All other dataset types are ignored.<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>         * <a name="line.1836"></a>
<span class="sourceLineNo">1837</span>         * @param a dataset<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>         * @param value replacement value<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>         */<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>        public static void removeNansAndInfinities(Dataset a, final Number value) {<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>                if (a instanceof DoubleDataset) {<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>                        final double dvalue = DTypeUtils.toReal(value);<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>                        final DoubleDataset set = (DoubleDataset) a;<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>                        final IndexIterator it = set.getIterator();<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>                        final double[] data = set.getData();<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>                        while (it.hasNext()) {<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>                                double x = data[it.index];<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>                                if (Double.isNaN(x) || Double.isInfinite(x))<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>                                        data[it.index] = dvalue;<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>                        }<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>                } else if (a instanceof FloatDataset) {<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>                        final float fvalue = (float) DTypeUtils.toReal(value);<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>                        final FloatDataset set = (FloatDataset) a;<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>                        final IndexIterator it = set.getIterator();<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>                        final float[] data = set.getData();<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>                        while (it.hasNext()) {<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>                                float x = data[it.index];<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>                                if (Float.isNaN(x) || Float.isInfinite(x))<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>                                        data[it.index] = fvalue;<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>                        }<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>                } else if (a instanceof CompoundDoubleDataset) {<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>                        final double dvalue = DTypeUtils.toReal(value);<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>                        final CompoundDoubleDataset set = (CompoundDoubleDataset) a;<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>                        final int is = set.getElementsPerItem();<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>                        final IndexIterator it = set.getIterator();<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>                        final double[] data = set.getData();<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>                        while (it.hasNext()) {<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                                        double x = data[it.index + j];<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>                                        if (Double.isNaN(x) || Double.isInfinite(x))<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>                                                data[it.index + j] = dvalue;<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                                }<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                        }<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                } else if (a instanceof CompoundFloatDataset) {<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                        final float fvalue = (float) DTypeUtils.toReal(value);<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                        final CompoundFloatDataset set = (CompoundFloatDataset) a;<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                        final int is = set.getElementsPerItem();<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>                        final IndexIterator it = set.getIterator();<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                        final float[] data = set.getData();<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                        while (it.hasNext()) {<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>                                        float x = data[it.index + j];<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>                                        if (Float.isNaN(x) || Float.isInfinite(x))<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>                                                data[it.index + j] = fvalue;<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>                                }<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>                        }<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>                }<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>        }<a name="line.1888"></a>
<span class="sourceLineNo">1889</span><a name="line.1889"></a>
<span class="sourceLineNo">1890</span>        /**<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>         * Make floating point datasets contain only finite values. Infinities and NaNs are replaced<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>         * by +/- MAX_VALUE and 0, respectively.<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>         * All other dataset types are ignored.<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>         * <a name="line.1894"></a>
<span class="sourceLineNo">1895</span>         * @param a dataset<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>         */<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>        public static void makeFinite(Dataset a) {<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>                if (a instanceof DoubleDataset) {<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>                        final DoubleDataset set = (DoubleDataset) a;<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>                        final IndexIterator it = set.getIterator();<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>                        final double[] data = set.getData();<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>                        while (it.hasNext()) {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>                                final double x = data[it.index];<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>                                if (Double.isNaN(x))<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>                                        data[it.index] = 0;<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>                                else if (Double.isInfinite(x))<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                                        data[it.index] = x &gt; 0 ? Double.MAX_VALUE : -Double.MAX_VALUE;<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>                        }<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>                } else if (a instanceof FloatDataset) {<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>                        final FloatDataset set = (FloatDataset) a;<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>                        final IndexIterator it = set.getIterator();<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>                        final float[] data = set.getData();<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>                        while (it.hasNext()) {<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>                                final float x = data[it.index];<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>                                if (Float.isNaN(x))<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>                                        data[it.index] = 0;<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>                                else if (Float.isInfinite(x))<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>                                        data[it.index] = x &gt; 0 ? Float.MAX_VALUE : -Float.MAX_VALUE;<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>                        }<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>                } else if (a instanceof CompoundDoubleDataset) {<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>                        final CompoundDoubleDataset set = (CompoundDoubleDataset) a;<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>                        final int is = set.getElementsPerItem();<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>                        final IndexIterator it = set.getIterator();<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>                        final double[] data = set.getData();<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>                        while (it.hasNext()) {<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>                                        final double x = data[it.index + j];<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>                                        if (Double.isNaN(x))<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>                                                data[it.index + j] = 0;<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>                                        else if (Double.isInfinite(x))<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>                                                data[it.index + j] = x &gt; 0 ? Double.MAX_VALUE : -Double.MAX_VALUE;<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>                                }<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>                        }<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>                } else if (a instanceof CompoundFloatDataset) {<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>                        final CompoundFloatDataset set = (CompoundFloatDataset) a;<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>                        final int is = set.getElementsPerItem();<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>                        final IndexIterator it = set.getIterator();<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>                        final float[] data = set.getData();<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>                        while (it.hasNext()) {<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>                                        final float x = data[it.index + j];<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>                                        if (Float.isNaN(x))<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>                                                data[it.index + j] = 0;<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>                                        else if (Float.isInfinite(x))<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>                                                data[it.index + j] = x &gt; 0 ? Float.MAX_VALUE : -Float.MAX_VALUE;<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>                                }<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>                        }<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>                }<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>        }<a name="line.1949"></a>
<span class="sourceLineNo">1950</span><a name="line.1950"></a>
<span class="sourceLineNo">1951</span>        /**<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>         * Find absolute index of first value in dataset that is equal to given number<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>         * @param a<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>         * @param n<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>         * @return absolute index (if greater than a.getSize() then no value found)<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>         */<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>        public static int findIndexEqualTo(final Dataset a, final double n) {<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>                IndexIterator iter = a.getIterator();<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>                while (iter.hasNext()) {<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>                        if (a.getElementDoubleAbs(iter.index) == n)<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>                                break;<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>                }<a name="line.1962"></a>
<span class="sourceLineNo">1963</span><a name="line.1963"></a>
<span class="sourceLineNo">1964</span>                return iter.index;<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>        }<a name="line.1965"></a>
<span class="sourceLineNo">1966</span><a name="line.1966"></a>
<span class="sourceLineNo">1967</span>        /**<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>         * Find absolute index of first value in dataset that is greater than given number<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>         * @param a<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>         * @param n<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>         * @return absolute index (if greater than a.getSize() then no value found)<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>         */<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>        public static int findIndexGreaterThan(final Dataset a, final double n) {<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>                IndexIterator iter = a.getIterator();<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>                while (iter.hasNext()) {<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>                        if (a.getElementDoubleAbs(iter.index) &gt; n)<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>                                break;<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>                }<a name="line.1978"></a>
<span class="sourceLineNo">1979</span><a name="line.1979"></a>
<span class="sourceLineNo">1980</span>                return iter.index;<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>        }<a name="line.1981"></a>
<span class="sourceLineNo">1982</span><a name="line.1982"></a>
<span class="sourceLineNo">1983</span>        /**<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>         * Find absolute index of first value in dataset that is greater than or equal to given number<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>         * @param a<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>         * @param n<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>         * @return absolute index (if greater than a.getSize() then no value found)<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>         */<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>        public static int findIndexGreaterThanOrEqualTo(final Dataset a, final double n) {<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>                IndexIterator iter = a.getIterator();<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>                while (iter.hasNext()) {<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>                        if (a.getElementDoubleAbs(iter.index) &gt;= n)<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>                                break;<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>                }<a name="line.1994"></a>
<span class="sourceLineNo">1995</span><a name="line.1995"></a>
<span class="sourceLineNo">1996</span>                return iter.index;<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>        }<a name="line.1997"></a>
<span class="sourceLineNo">1998</span><a name="line.1998"></a>
<span class="sourceLineNo">1999</span>        /**<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>         * Find absolute index of first value in dataset that is less than given number<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>         * @param a<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>         * @param n<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>         * @return absolute index (if greater than a.getSize() then no value found)<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>         */<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>        public static int findIndexLessThan(final Dataset a, final double n) {<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>                IndexIterator iter = a.getIterator();<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>                while (iter.hasNext()) {<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>                        if (a.getElementDoubleAbs(iter.index) &lt; n)<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>                                break;<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>                }<a name="line.2010"></a>
<span class="sourceLineNo">2011</span><a name="line.2011"></a>
<span class="sourceLineNo">2012</span>                return iter.index;<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>        }<a name="line.2013"></a>
<span class="sourceLineNo">2014</span><a name="line.2014"></a>
<span class="sourceLineNo">2015</span>        /**<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>         * Find absolute index of first value in dataset that is less than or equal to given number<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>         * @param a<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>         * @param n<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>         * @return absolute index (if greater than a.getSize() then no value found)<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>         */<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>        public static int findIndexLessThanOrEqualTo(final Dataset a, final double n) {<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>                IndexIterator iter = a.getIterator();<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>                while (iter.hasNext()) {<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>                        if (a.getElementDoubleAbs(iter.index) &lt;= n)<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>                                break;<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>                }<a name="line.2026"></a>
<span class="sourceLineNo">2027</span><a name="line.2027"></a>
<span class="sourceLineNo">2028</span>                return iter.index;<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>        }<a name="line.2029"></a>
<span class="sourceLineNo">2030</span><a name="line.2030"></a>
<span class="sourceLineNo">2031</span>        /**<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>         * Find first occurrences in one dataset of values given in another sorted dataset  <a name="line.2032"></a>
<span class="sourceLineNo">2033</span>         * @param a<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>         * @param values sorted 1D dataset of values to find<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>         * @return absolute indexes of those first occurrences (-1 is used to indicate value not found)<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>         */<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>        public static IntegerDataset findFirstOccurrences(final Dataset a, final Dataset values) {<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>                if (values.getRank() != 1) {<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>                        throw new IllegalArgumentException("Values dataset must be 1D");<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>                }<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>                IntegerDataset indexes = new IntegerDataset(values.getSize());<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>                indexes.fill(-1);<a name="line.2042"></a>
<span class="sourceLineNo">2043</span><a name="line.2043"></a>
<span class="sourceLineNo">2044</span>                IndexIterator it = a.getIterator();<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>                final int n = values.getSize();<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>                if (values.getDType() == Dataset.INT64) {<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>                        while (it.hasNext()) {<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>                                long x = a.getElementLongAbs(it.index);<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>        <a name="line.2049"></a>
<span class="sourceLineNo">2050</span>                                int l = 0; // binary search to find value in sorted dataset<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>                                long vl = values.getLong(l);<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>                                if (x &lt;= vl) {<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>                                        if (x == vl &amp;&amp; indexes.getAbs(l) &lt; 0)<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>                                                indexes.setAbs(l, it.index);<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>                                        continue;<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>                                }<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>                                int h = n - 1;<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>                                long vh = values.getLong(h);<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>                                if (x &gt;= vh) {<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>                                        if (x == vh &amp;&amp; indexes.getAbs(h) &lt; 0)<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>                                                indexes.setAbs(h, it.index);<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>                                        continue;<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>                                }<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>                                while (h - l &gt; 1) {<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>                                        int m = (l + h) / 2;<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>                                        long vm = values.getLong(m);<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>                                        if (x &lt; vm) {<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>                                                h = m;<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>                                        } else if (x &gt; vm) {<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>                                                l = m;<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>                                        } else {<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>                                                if (indexes.getAbs(m) &lt; 0)<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>                                                        indexes.setAbs(m, it.index);<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>                                                break;<a name="line.2074"></a>
<span class="sourceLineNo">2075</span>                                        }<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>                                }<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>                        }<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>                } else {<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>                        while (it.hasNext()) {<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>                                double x = a.getElementDoubleAbs(it.index);<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>        <a name="line.2081"></a>
<span class="sourceLineNo">2082</span>                                int l = 0; // binary search to find value in sorted dataset<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>                                double vl = values.getDouble(l);<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>                                if (x &lt;= vl) {<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>                                        if (x == vl &amp;&amp; indexes.getAbs(l) &lt; 0)<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>                                                indexes.setAbs(l, it.index);<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>                                        continue;<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>                                }<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>                                int h = n - 1;<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>                                double vh = values.getDouble(h);<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>                                if (x &gt;= vh) {<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>                                        if (x == vh &amp;&amp; indexes.getAbs(h) &lt; 0)<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>                                                indexes.setAbs(h, it.index);<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>                                        continue;<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>                                }<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>                                while (h - l &gt; 1) {<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>                                        int m = (l + h) / 2;<a name="line.2097"></a>
<span class="sourceLineNo">2098</span>                                        double vm = values.getDouble(m);<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>                                        if (x &lt; vm) {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>                                                h = m;<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>                                        } else if (x &gt; vm) {<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>                                                l = m;<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>                                        } else {<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>                                                if (indexes.getAbs(m) &lt; 0)<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>                                                        indexes.setAbs(m, it.index);<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>                                                break;<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>                                        }<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>                                }<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>                        }<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>                }<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>                return indexes;<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>        }<a name="line.2112"></a>
<span class="sourceLineNo">2113</span><a name="line.2113"></a>
<span class="sourceLineNo">2114</span>        /**<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>         * Find indexes in sorted dataset of values for each value in other dataset<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>         * @param a<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>         * @param values sorted 1D dataset of values to find<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>         * @return absolute indexes of values (-1 is used to indicate value not found)<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>         */<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>        public static IntegerDataset findIndexesForValues(final Dataset a, final Dataset values) {<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>                if (values.getRank() != 1) {<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>                        throw new IllegalArgumentException("Values dataset must be 1D");<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>                }<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>                IntegerDataset indexes = new IntegerDataset(a.getSize());<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>                indexes.fill(-1);<a name="line.2125"></a>
<span class="sourceLineNo">2126</span><a name="line.2126"></a>
<span class="sourceLineNo">2127</span>                IndexIterator it = a.getIterator();<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>                int i = -1;<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>                final int n = values.getSize();<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>                if (values.getDType() == Dataset.INT64) {<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>                        while (it.hasNext()) {<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>                                i++;<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>                                long x = a.getElementLongAbs(it.index);<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>        <a name="line.2134"></a>
<span class="sourceLineNo">2135</span>                                int l = 0; // binary search to find value in sorted dataset<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>                                long vl = values.getLong(l);<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>                                if (x &lt;= vl) {<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>                                        if (x == vl)<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>                                                indexes.setAbs(i, l);<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>                                        continue;<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>                                }<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>                                int h = n - 1;<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>                                long vh = values.getLong(h);<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>                                if (x &gt;= vh) {<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>                                        if (x == vh)<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>                                                indexes.setAbs(i, h);<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>                                        continue;<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>                                }<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>                                while (h - l &gt; 1) {<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>                                        int m = (l + h) / 2;<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>                                        long vm = values.getLong(m);<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>                                        if (x &lt; vm) {<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>                                                h = m;<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>                                        } else if (x &gt; vm) {<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>                                                l = m;<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>                                        } else {<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>                                                indexes.setAbs(i, m);<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>                                                break;<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>                                        }<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>                                }<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>                        }<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>                } else {<a name="line.2162"></a>
<span class="sourceLineNo">2163</span>                        while (it.hasNext()) {<a name="line.2163"></a>
<span class="sourceLineNo">2164</span>                                i++;<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>                                double x = a.getElementDoubleAbs(it.index);<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>        <a name="line.2166"></a>
<span class="sourceLineNo">2167</span>                                int l = 0; // binary search to find value in sorted dataset<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>                                double vl = values.getDouble(l);<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>                                if (x &lt;= vl) {<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>                                        if (x == vl)<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>                                                indexes.setAbs(i, l);<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>                                        continue;<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>                                }<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>                                int h = n - 1;<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>                                double vh = values.getDouble(h);<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>                                if (x &gt;= vh) {<a name="line.2176"></a>
<span class="sourceLineNo">2177</span>                                        if (x == vh)<a name="line.2177"></a>
<span class="sourceLineNo">2178</span>                                                indexes.setAbs(i, h);<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>                                        continue;<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>                                }<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>                                while (h - l &gt; 1) {<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>                                        int m = (l + h) / 2;<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>                                        double vm = values.getDouble(m);<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>                                        if (x &lt; vm) {<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>                                                h = m;<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>                                        } else if (x &gt; vm) {<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>                                                l = m;<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>                                        } else {<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>                                                indexes.setAbs(i, m);<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>                                                break;<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>                                        }<a name="line.2191"></a>
<span class="sourceLineNo">2192</span>                                }<a name="line.2192"></a>
<span class="sourceLineNo">2193</span>                        }<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>                }<a name="line.2194"></a>
<span class="sourceLineNo">2195</span><a name="line.2195"></a>
<span class="sourceLineNo">2196</span>                return indexes;<a name="line.2196"></a>
<span class="sourceLineNo">2197</span>        }<a name="line.2197"></a>
<span class="sourceLineNo">2198</span><a name="line.2198"></a>
<span class="sourceLineNo">2199</span>        /**<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>         * Roll items over given axis by given amount<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>         * @param a<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>         * @param shift<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>         * @param axis if null, then roll flattened dataset<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>         * @return rolled dataset<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>         */<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>        public static &lt;T extends Dataset&gt; T roll(final T a, final int shift, final Integer axis) {<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>                Dataset r = DatasetFactory.zeros(a);<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>                int is = a.getElementsPerItem();<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>                if (axis == null) {<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>                        IndexIterator it = a.getIterator();<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>                        int s = r.getSize();<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>                        int i = shift % s;<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>                        if (i &lt; 0)<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>                                i += s;<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>                        while (it.hasNext()) {<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>                                r.setObjectAbs(i, a.getObjectAbs(it.index));<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>                                i += is;<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>                                if (i &gt;= s) {<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>                                        i %= s;<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>                                }<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>                        }<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>                } else {<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>                        PositionIterator pi = a.getPositionIterator(axis);<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>                        int s = a.getShapeRef()[axis];<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>                        @SuppressWarnings("deprecation")<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>                        Dataset u = DatasetFactory.zeros(is, new int[] {s}, a.getDType());<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>                        Dataset v = DatasetFactory.zeros(u);<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>                        int[] pos = pi.getPos();<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>                        boolean[] hit = pi.getOmit();<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>                        while (pi.hasNext()) {<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>                                a.copyItemsFromAxes(pos, hit, u);<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>                                int i = shift % s;<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>                                if (i &lt; 0)<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>                                        i += s;<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>                                for (int j = 0; j &lt; s; j++) {<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>                                        v.setObjectAbs(i, u.getObjectAbs(j*is));<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>                                        i += is;<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>                                        if (i &gt;= s) {<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>                                                i %= s;<a name="line.2239"></a>
<span class="sourceLineNo">2240</span>                                        }<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>                                }<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>                                r.setItemsOnAxes(pos, hit, v.getBuffer());<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>                        }<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>                }<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>                return (T) r;<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>        }<a name="line.2246"></a>
<span class="sourceLineNo">2247</span><a name="line.2247"></a>
<span class="sourceLineNo">2248</span>        /**<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>         * Roll the specified axis backwards until it lies in given position<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>         * @param a<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>         * @param axis The rolled axis (index in shape array). Other axes are left unchanged in relative positions <a name="line.2251"></a>
<span class="sourceLineNo">2252</span>         * @param start The position with it right of the destination of the rolled axis<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>         * @return dataset with rolled axis<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>         */<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>        public static &lt;T extends Dataset&gt; T rollAxis(final T a, int axis, int start) {<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>                int r = a.getRank();<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>                if (axis &lt; 0)<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>                        axis += r;<a name="line.2258"></a>
<span class="sourceLineNo">2259</span>                if (axis &lt; 0 || axis &gt;= r) {<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>                        throw new IllegalArgumentException("Axis is out of range: it should be &gt;= 0 and &lt; " + r);<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>                }<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>                if (start &lt; 0)<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>                        start += r;<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>                if (start &lt; 0 || start &gt; r) {<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>                        throw new IllegalArgumentException("Start is out of range: it should be &gt;= 0 and &lt;= " + r);<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>                }<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>                if (axis &lt; start)<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>                        start--;<a name="line.2268"></a>
<span class="sourceLineNo">2269</span><a name="line.2269"></a>
<span class="sourceLineNo">2270</span>                if (axis == start)<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>                        return a;<a name="line.2271"></a>
<span class="sourceLineNo">2272</span><a name="line.2272"></a>
<span class="sourceLineNo">2273</span>                ArrayList&lt;Integer&gt; axes = new ArrayList&lt;Integer&gt;();<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>                for (int i = 0; i &lt; r; i++) {<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>                        if (i != axis) {<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>                                axes.add(i);<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>                        }<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>                }<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>                axes.add(start, axis);<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>                int[] aa = new int[r];<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>                for (int i = 0; i &lt; r; i++) {<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>                        aa[i] = axes.get(i);<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>                }<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>                return (T) a.getTransposedView(aa);<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>        }<a name="line.2285"></a>
<span class="sourceLineNo">2286</span><a name="line.2286"></a>
<span class="sourceLineNo">2287</span>        private static SliceND createFlippedSlice(final Dataset a, int axis) {<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>                int[] shape = a.getShapeRef();<a name="line.2288"></a>
<span class="sourceLineNo">2289</span>                SliceND slice = new SliceND(shape);<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>                slice.flip(axis);<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>                return slice;<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>        }<a name="line.2292"></a>
<span class="sourceLineNo">2293</span><a name="line.2293"></a>
<span class="sourceLineNo">2294</span>        /**<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>         * Flip items in left/right direction, column-wise, or along second axis <a name="line.2295"></a>
<span class="sourceLineNo">2296</span>         * @param a dataset must be at least 2D<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>         * @return view of flipped dataset<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>         */<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>        public static &lt;T extends Dataset&gt; T flipLeftRight(final T a) {<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>                if (a.getRank() &lt; 2) {<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>                        throw new IllegalArgumentException("Dataset must be at least 2D");<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>                }<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>                return (T) a.getSliceView(createFlippedSlice(a, 1));<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>        }<a name="line.2304"></a>
<span class="sourceLineNo">2305</span><a name="line.2305"></a>
<span class="sourceLineNo">2306</span>        /**<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>         * Flip items in up/down direction, row-wise, or along first axis <a name="line.2307"></a>
<span class="sourceLineNo">2308</span>         * @param a dataset<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>         * @return view of flipped dataset<a name="line.2309"></a>
<span class="sourceLineNo">2310</span>         */<a name="line.2310"></a>
<span class="sourceLineNo">2311</span>        public static &lt;T extends Dataset&gt; T flipUpDown(final T a) {<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>                return (T) a.getSliceView(createFlippedSlice(a, 0));<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>        }<a name="line.2313"></a>
<span class="sourceLineNo">2314</span><a name="line.2314"></a>
<span class="sourceLineNo">2315</span>        /**<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>         * Rotate items in first two dimension by 90 degrees anti-clockwise<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>         * @param a dataset must be at least 2D<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>         * @return view of flipped dataset<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>         */<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>        public static &lt;T extends Dataset&gt; T rotate90(final T a) {<a name="line.2320"></a>
<span class="sourceLineNo">2321</span>                return rotate90(a, 1);<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>        }<a name="line.2322"></a>
<span class="sourceLineNo">2323</span><a name="line.2323"></a>
<span class="sourceLineNo">2324</span>        /**<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>         * Rotate items in first two dimension by 90 degrees anti-clockwise<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>         * @param a dataset must be at least 2D<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>         * @param k number of 90-degree rotations<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>         * @return view of flipped dataset<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>         */<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>        public static &lt;T extends Dataset&gt; T rotate90(final T a, int k) {<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>                k = k % 4;<a name="line.2331"></a>
<span class="sourceLineNo">2332</span>                while (k &lt; 0) {<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>                        k += 4;<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>                }<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>                int r = a.getRank();<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>                if (r &lt; 2) {<a name="line.2336"></a>
<span class="sourceLineNo">2337</span>                        throw new IllegalArgumentException("Dataset must be at least 2D");<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>                }<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>                switch (k) {<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>                case 1: case 3:<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>                        int[] axes = new int[r];<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>                        axes[0] = 1;<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>                        axes[1] = 0;<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>                        for (int i = 2; i &lt; r; i++) {<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>                                axes[i] = i;<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>                        }<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>                        Dataset t = a.getTransposedView(axes);<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>                        return (T) t.getSliceView(createFlippedSlice(t, k == 1 ? 0 : 1));<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>                case 2:<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>                        SliceND s = createFlippedSlice(a, 0);<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>                        s.flip(1);<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>                        return (T) a.getSliceView(s);<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>                default:<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>                case 0:<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>                        return a;<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>                }<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>        }<a name="line.2357"></a>
<span class="sourceLineNo">2358</span><a name="line.2358"></a>
<span class="sourceLineNo">2359</span>        /**<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>         * Select content according where condition is true. All inputs are broadcasted to a maximum shape<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>         * @param condition boolean dataset<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>         * @param x<a name="line.2362"></a>
<span class="sourceLineNo">2363</span>         * @param y<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>         * @return dataset where content is x or y depending on whether condition is true or otherwise <a name="line.2364"></a>
<span class="sourceLineNo">2365</span>         */<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>        public static Dataset select(BooleanDataset condition, Object x, Object y) {<a name="line.2366"></a>
<span class="sourceLineNo">2367</span>                Object[] all = new Object[] {condition, x, y};<a name="line.2367"></a>
<span class="sourceLineNo">2368</span>                Dataset[] dAll = BroadcastUtils.convertAndBroadcast(all);<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>                condition = (BooleanDataset) dAll[0];<a name="line.2369"></a>
<span class="sourceLineNo">2370</span>                Dataset dx = dAll[1];<a name="line.2370"></a>
<span class="sourceLineNo">2371</span>                Dataset dy = dAll[2];<a name="line.2371"></a>
<span class="sourceLineNo">2372</span>                int dt = DTypeUtils.getBestDType(dx.getDType(),dy.getDType());<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>                int ds = Math.max(dx.getElementsPerItem(), dy.getElementsPerItem());<a name="line.2373"></a>
<span class="sourceLineNo">2374</span><a name="line.2374"></a>
<span class="sourceLineNo">2375</span>                @SuppressWarnings("deprecation")<a name="line.2375"></a>
<span class="sourceLineNo">2376</span>                Dataset r = DatasetFactory.zeros(ds, condition.getShapeRef(), dt);<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>                IndexIterator iter = condition.getIterator(true);<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>                final int[] pos = iter.getPos();<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>                int i = 0;<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>                while (iter.hasNext()) {<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>                        r.setObjectAbs(i++, condition.getElementBooleanAbs(iter.index) ? dx.getObject(pos) : dy.getObject(pos));<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>                }<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>                return r;<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>        }<a name="line.2384"></a>
<span class="sourceLineNo">2385</span><a name="line.2385"></a>
<span class="sourceLineNo">2386</span>        /**<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>         * Select content from choices where condition is true, otherwise use default. All inputs are broadcasted to a maximum shape<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>         * @param conditions array of boolean datasets<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>         * @param choices array of datasets or objects<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>         * @param def default value (can be a dataset)<a name="line.2390"></a>
<span class="sourceLineNo">2391</span>         * @return dataset<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>         */<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>        public static Dataset select(BooleanDataset[] conditions, Object[] choices, Object def) {<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>                final int n = conditions.length;<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>                if (choices.length != n) {<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>                        throw new IllegalArgumentException("Choices list is not same length as conditions list");<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>                }<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>                Object[] all = new Object[2*n];<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>                System.arraycopy(conditions, 0, all, 0, n);<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>                System.arraycopy(choices, 0, all, n, n);<a name="line.2400"></a>
<span class="sourceLineNo">2401</span>                Dataset[] dAll = BroadcastUtils.convertAndBroadcast(all);<a name="line.2401"></a>
<span class="sourceLineNo">2402</span>                conditions = new BooleanDataset[n];<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>                Dataset[] dChoices = new Dataset[n];<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>                System.arraycopy(dAll, 0, conditions, 0, n);<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>                System.arraycopy(dAll, n, dChoices, 0, n);<a name="line.2405"></a>
<span class="sourceLineNo">2406</span>                int dt = -1;<a name="line.2406"></a>
<span class="sourceLineNo">2407</span>                int ds = -1;<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>                for (int i = 0; i &lt; n; i++) {<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>                        Dataset a = dChoices[i];<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>                        int t = a.getDType();<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>                        if (t &gt; dt)<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>                                dt = t;<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>                        int s = a.getElementsPerItem();<a name="line.2413"></a>
<span class="sourceLineNo">2414</span>                        if (s &gt; ds)<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>                                ds = s;<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>                }<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>                if (dt &lt; 0 || ds &lt; 1) {<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>                        throw new IllegalArgumentException("Dataset types of choices are invalid");<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>                }<a name="line.2419"></a>
<span class="sourceLineNo">2420</span><a name="line.2420"></a>
<span class="sourceLineNo">2421</span>                @SuppressWarnings("deprecation")<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>                Dataset r = DatasetFactory.zeros(ds, conditions[0].getShapeRef(), dt);<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>                Dataset d = DatasetFactory.createFromObject(def).getBroadcastView(r.getShapeRef());<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>                PositionIterator iter = new PositionIterator(r.getShapeRef());<a name="line.2424"></a>
<span class="sourceLineNo">2425</span>                final int[] pos = iter.getPos();<a name="line.2425"></a>
<span class="sourceLineNo">2426</span>                int i = 0;<a name="line.2426"></a>
<span class="sourceLineNo">2427</span>                while (iter.hasNext()) {<a name="line.2427"></a>
<span class="sourceLineNo">2428</span>                        int j = 0;<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>                        for (; j &lt; n; j++) {<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>                                if (conditions[j].get(pos)) {<a name="line.2430"></a>
<span class="sourceLineNo">2431</span>                                        r.setObjectAbs(i++, dChoices[j].getObject(pos));<a name="line.2431"></a>
<span class="sourceLineNo">2432</span>                                        break;<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>                                }<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>                        }<a name="line.2434"></a>
<span class="sourceLineNo">2435</span>                        if (j == n) {<a name="line.2435"></a>
<span class="sourceLineNo">2436</span>                                r.setObjectAbs(i++, d.getObject(pos));<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>                        }<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>                }<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>                return r;<a name="line.2439"></a>
<span class="sourceLineNo">2440</span>        }<a name="line.2440"></a>
<span class="sourceLineNo">2441</span><a name="line.2441"></a>
<span class="sourceLineNo">2442</span>        /**<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>         * Choose content from choices where condition is true, otherwise use default. All inputs are broadcasted to a maximum shape<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>         * @param index integer dataset (ideally, items should be in [0, n) range, if there are n choices)<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>         * @param choices array of datasets or objects<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>         * @param throwAIOOBE if true, throw array index out of bound exception<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>         * @param clip true to clip else wrap indices out of bounds; only used when throwAOOBE is false<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>         * @return dataset<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>         */<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>        public static Dataset choose(IntegerDataset index, Object[] choices, boolean throwAIOOBE, boolean clip) {<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>                final int n = choices.length;<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>                Object[] all = new Object[n + 1];<a name="line.2452"></a>
<span class="sourceLineNo">2453</span>                System.arraycopy(choices, 0, all, 0, n);<a name="line.2453"></a>
<span class="sourceLineNo">2454</span>                all[n] = index;<a name="line.2454"></a>
<span class="sourceLineNo">2455</span>                Dataset[] dChoices = BroadcastUtils.convertAndBroadcast(all);<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>                int dt = -1;<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>                int ds = -1;<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>                int mr = -1;<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>                for (int i = 0; i &lt; n; i++) {<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>                        Dataset a = dChoices[i];<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>                        int r = a.getRank();<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>                        if (r &gt; mr)<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>                                mr = r;<a name="line.2463"></a>
<span class="sourceLineNo">2464</span>                        int t = a.getDType();<a name="line.2464"></a>
<span class="sourceLineNo">2465</span>                        if (t &gt; dt)<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>                                dt = t;<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>                        int s = a.getElementsPerItem();<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>                        if (s &gt; ds)<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>                                ds = s;<a name="line.2469"></a>
<span class="sourceLineNo">2470</span>                }<a name="line.2470"></a>
<span class="sourceLineNo">2471</span>                if (dt &lt; 0 || ds &lt; 1) {<a name="line.2471"></a>
<span class="sourceLineNo">2472</span>                        throw new IllegalArgumentException("Dataset types of choices are invalid");<a name="line.2472"></a>
<span class="sourceLineNo">2473</span>                }<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>                index = (IntegerDataset) dChoices[n];<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>                dChoices[n] = null;<a name="line.2475"></a>
<span class="sourceLineNo">2476</span><a name="line.2476"></a>
<span class="sourceLineNo">2477</span>                @SuppressWarnings("deprecation")<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>                Dataset r = DatasetFactory.zeros(ds, index.getShape(), dt);<a name="line.2478"></a>
<span class="sourceLineNo">2479</span>                IndexIterator iter = index.getIterator(true);<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>                final int[] pos = iter.getPos();<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>                int i = 0;<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>                while (iter.hasNext()) {<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>                        int j = index.getAbs(iter.index);<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>                        if (j &lt; 0) {<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>                                if (throwAIOOBE)<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>                                        throw new ArrayIndexOutOfBoundsException(j);<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>                                if (clip) {<a name="line.2487"></a>
<span class="sourceLineNo">2488</span>                                        j = 0;<a name="line.2488"></a>
<span class="sourceLineNo">2489</span>                                } else {<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>                                        j %= n;<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>                                        j += n; // as remainder still negative<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>                                }<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>                        }<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>                        if (j &gt;= n) {<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>                                if (throwAIOOBE)<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>                                        throw new ArrayIndexOutOfBoundsException(j);<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>                                if (clip) {<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>                                        j = n - 1;<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>                                } else {<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>                                        j %= n;<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>                                }<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>                        }<a name="line.2502"></a>
<span class="sourceLineNo">2503</span>                        Dataset c = dChoices[j];<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>                        r.setObjectAbs(i++, c.getObject(pos));<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>                }<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>                return r;<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>        }<a name="line.2507"></a>
<span class="sourceLineNo">2508</span><a name="line.2508"></a>
<span class="sourceLineNo">2509</span>        /**<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>         * Calculate positions in given shape from a dataset of 1-D indexes<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>         * @param indices<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>         * @param shape<a name="line.2512"></a>
<span class="sourceLineNo">2513</span>         * @return list of positions as integer datasets<a name="line.2513"></a>
<span class="sourceLineNo">2514</span>         */<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>        public static List&lt;IntegerDataset&gt; calcPositionsFromIndexes(Dataset indices, int[] shape) {<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>                int rank = shape.length;<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>                List&lt;IntegerDataset&gt; posns = new ArrayList&lt;IntegerDataset&gt;();<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>                int[] iShape = indices.getShapeRef();<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>                        posns.add(new IntegerDataset(iShape));<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>                }<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>                IndexIterator it = indices.getIterator(true);<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>                int[] pos = it.getPos();<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>                while (it.hasNext()) {<a name="line.2524"></a>
<span class="sourceLineNo">2525</span>                        int n = indices.getInt(pos);<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>                        int[] p = ShapeUtils.getNDPositionFromShape(n, shape);<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>                                posns.get(i).setItem(p[i], pos);<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>                        }<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>                }<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>                return posns;<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>        }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span><a name="line.2533"></a>
<span class="sourceLineNo">2534</span><a name="line.2534"></a>
<span class="sourceLineNo">2535</span>        /**<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>         * Calculate indexes in given shape from datasets of position<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>         * @param positions as a list of datasets where each holds the position in a dimension<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>         * @param shape<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>         * @param mode either null, zero-length, unit length or length of rank of shape where<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>         *  0 = raise exception, 1 = wrap, 2 = clip<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>         * @return indexes as an integer dataset<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>         */<a name="line.2542"></a>
<span class="sourceLineNo">2543</span>        public static IntegerDataset calcIndexesFromPositions(List&lt;? extends Dataset&gt; positions, int[] shape, int... mode) {<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>                int rank = shape.length;<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>                if (positions.size() != rank) {<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>                        throw new IllegalArgumentException("Number of position datasets must be equal to rank of shape");<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>                }<a name="line.2547"></a>
<span class="sourceLineNo">2548</span><a name="line.2548"></a>
<span class="sourceLineNo">2549</span>                if (mode == null || mode.length == 0) {<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>                        mode = new int[rank];<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>                } else if (mode.length == 1) {<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>                        int m = mode[0];<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>                        mode = new int[rank];<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>                        Arrays.fill(mode, m);<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>                } else if (mode.length != rank) {<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>                        throw new IllegalArgumentException("Mode length greater than one must match rank of shape");<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>                }<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>                for (int i = 0; i &lt; rank; i++) {<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>                        int m = mode[i];<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>                        if (m &lt; 0 || m &gt; 2) {<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>                                throw new IllegalArgumentException("Unknown mode value - it must be 0, 1, or 2");<a name="line.2561"></a>
<span class="sourceLineNo">2562</span>                        }<a name="line.2562"></a>
<span class="sourceLineNo">2563</span>                }<a name="line.2563"></a>
<span class="sourceLineNo">2564</span><a name="line.2564"></a>
<span class="sourceLineNo">2565</span>                Dataset p = positions.get(0);<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>                IntegerDataset indexes = new IntegerDataset(p.getShapeRef());<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>                IndexIterator it = p.getIterator(true);<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>                int[] iPos = it.getPos();<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>                int[] tPos = new int[rank];<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>                while (it.hasNext()) {<a name="line.2570"></a>
<span class="sourceLineNo">2571</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.2571"></a>
<span class="sourceLineNo">2572</span>                                p = positions.get(i);<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>                                int j = p.getInt(iPos);<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>                                int d = shape[i];<a name="line.2574"></a>
<span class="sourceLineNo">2575</span>                                if (mode[i] == 0) {<a name="line.2575"></a>
<span class="sourceLineNo">2576</span>                                        if (j &lt; 0 || j &gt;= d) {<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>                                                throw new ArrayIndexOutOfBoundsException("Position value exceeds dimension in shape");<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>                                        }<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>                                } else if (mode[i] == 1) {<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>                                        while (j &lt; 0)<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>                                                j += d;<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>                                        while (j &gt;= d)<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>                                                j -= d;<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>                                } else {<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>                                        if (j &lt; 0)<a name="line.2585"></a>
<span class="sourceLineNo">2586</span>                                                j = 0;<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>                                        if (j &gt;= d)<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>                                                j = d - 1;<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>                                }<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>                                tPos[i] = j;<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>                        }<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>                        indexes.set(ShapeUtils.getFlat1DIndex(shape, tPos), iPos);<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>                }<a name="line.2593"></a>
<span class="sourceLineNo">2594</span><a name="line.2594"></a>
<span class="sourceLineNo">2595</span>                return indexes;<a name="line.2595"></a>
<span class="sourceLineNo">2596</span>        }<a name="line.2596"></a>
<span class="sourceLineNo">2597</span><a name="line.2597"></a>
<span class="sourceLineNo">2598</span>        /**<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>         * Serialize dataset by flattening it. Discards metadata<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>         * @param data<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>         * @return some java array<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>         */<a name="line.2602"></a>
<span class="sourceLineNo">2603</span>        public static Serializable serializeDataset(final IDataset data) {<a name="line.2603"></a>
<span class="sourceLineNo">2604</span>                Dataset d = convertToDataset(data.getSliceView());<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>                d.clearMetadata(null);<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>                return d.flatten().getBuffer();<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>        }<a name="line.2607"></a>
<span class="sourceLineNo">2608</span><a name="line.2608"></a>
<span class="sourceLineNo">2609</span>        /**<a name="line.2609"></a>
<span class="sourceLineNo">2610</span>         * Extract values where condition is non-zero. This is similar to Dataset#getByBoolean but supports broadcasting<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>         * @param data<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>         * @param condition should be broadcastable to data<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>         * @return 1-D dataset of values<a name="line.2613"></a>
<span class="sourceLineNo">2614</span>         */<a name="line.2614"></a>
<span class="sourceLineNo">2615</span>        @SuppressWarnings("deprecation")<a name="line.2615"></a>
<span class="sourceLineNo">2616</span>        public static Dataset extract(final IDataset data, final IDataset condition) {<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>                Dataset a = convertToDataset(data.getSliceView());<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>                Dataset b = cast(condition.getSliceView(), Dataset.BOOL);<a name="line.2618"></a>
<span class="sourceLineNo">2619</span><a name="line.2619"></a>
<span class="sourceLineNo">2620</span>                try {<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>                        return a.getByBoolean(b);<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>                } catch (IllegalArgumentException e) {<a name="line.2622"></a>
<span class="sourceLineNo">2623</span>                        final int length = ((Number) b.sum()).intValue();<a name="line.2623"></a>
<span class="sourceLineNo">2624</span>        <a name="line.2624"></a>
<span class="sourceLineNo">2625</span>                        BroadcastPairIterator it = new BroadcastPairIterator(a, b, null, false);<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>                        int size = ShapeUtils.calcSize(it.getShape());<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>                        Dataset c;<a name="line.2627"></a>
<span class="sourceLineNo">2628</span>                        if (length &lt; size) {<a name="line.2628"></a>
<span class="sourceLineNo">2629</span>                                int[] ashape = it.getFirstShape();<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>                                int[] bshape = it.getSecondShape();<a name="line.2630"></a>
<span class="sourceLineNo">2631</span>                                int r = ashape.length;<a name="line.2631"></a>
<span class="sourceLineNo">2632</span>                                size = length;<a name="line.2632"></a>
<span class="sourceLineNo">2633</span>                                for (int i = 0; i &lt; r; i++) {<a name="line.2633"></a>
<span class="sourceLineNo">2634</span>                                        int s = ashape[i];<a name="line.2634"></a>
<span class="sourceLineNo">2635</span>                                        if (s &gt; 1 &amp;&amp; bshape[i] == 1) {<a name="line.2635"></a>
<span class="sourceLineNo">2636</span>                                                size *= s;<a name="line.2636"></a>
<span class="sourceLineNo">2637</span>                                        }<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>                                }<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>                        }<a name="line.2639"></a>
<span class="sourceLineNo">2640</span>                        c = DatasetFactory.zeros(new int[] {size}, a.getDType());<a name="line.2640"></a>
<span class="sourceLineNo">2641</span>        <a name="line.2641"></a>
<span class="sourceLineNo">2642</span>                        int i = 0;<a name="line.2642"></a>
<span class="sourceLineNo">2643</span>                        if (it.isOutputDouble()) {<a name="line.2643"></a>
<span class="sourceLineNo">2644</span>                                while (it.hasNext()) {<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>                                        if (it.bLong != 0) {<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>                                                c.setObjectAbs(i++, it.aDouble);<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>                                        }<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>                                }<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>                        } else {<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>                                while (it.hasNext()) {<a name="line.2650"></a>
<span class="sourceLineNo">2651</span>                                        if (it.bLong != 0) {<a name="line.2651"></a>
<span class="sourceLineNo">2652</span>                                                c.setObjectAbs(i++, it.aLong);<a name="line.2652"></a>
<span class="sourceLineNo">2653</span>                                        }<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>                                }<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>                        }<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>        <a name="line.2656"></a>
<span class="sourceLineNo">2657</span>                        return c;<a name="line.2657"></a>
<span class="sourceLineNo">2658</span>                }<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>        }<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>}<a name="line.2660"></a>




























































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