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




























































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