<!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>// This is generated from CompoundDoubleDataset.java by fromcpddouble.py<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>package org.eclipse.january.dataset;<a name="line.15"></a>
<span class="sourceLineNo">016</span><a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.util.Arrays;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.commons.math3.complex.Complex;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
<span class="sourceLineNo">022</span> * Extend compound dataset for float values // PRIM_TYPE<a name="line.22"></a>
<span class="sourceLineNo">023</span> */<a name="line.23"></a>
<span class="sourceLineNo">024</span>public class CompoundFloatDataset extends AbstractCompoundDataset {<a name="line.24"></a>
<span class="sourceLineNo">025</span>        // pin UID to base class<a name="line.25"></a>
<span class="sourceLineNo">026</span>        private static final long serialVersionUID = Dataset.serialVersionUID;<a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>        protected float[] data; // subclass alias // PRIM_TYPE<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>        @Override<a name="line.30"></a>
<span class="sourceLineNo">031</span>        protected void setData() {<a name="line.31"></a>
<span class="sourceLineNo">032</span>                data = (float[]) odata; // PRIM_TYPE<a name="line.32"></a>
<span class="sourceLineNo">033</span>        }<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>        protected float[] createArray(final int size) { // PRIM_TYPE<a name="line.35"></a>
<span class="sourceLineNo">036</span>                float[] array = null; // PRIM_TYPE<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>                try {<a name="line.38"></a>
<span class="sourceLineNo">039</span>                        array = new float[isize * size]; // PRIM_TYPE<a name="line.39"></a>
<span class="sourceLineNo">040</span>                } catch (OutOfMemoryError e) {<a name="line.40"></a>
<span class="sourceLineNo">041</span>                        logger.error("The size of the dataset ({}) that is being created is too large "<a name="line.41"></a>
<span class="sourceLineNo">042</span>                                        + "and there is not enough memory to hold it.", size);<a name="line.42"></a>
<span class="sourceLineNo">043</span>                        throw new OutOfMemoryError("The dimensions given are too large, and there is "<a name="line.43"></a>
<span class="sourceLineNo">044</span>                                        + "not enough memory available in the Java Virtual Machine");<a name="line.44"></a>
<span class="sourceLineNo">045</span>                }<a name="line.45"></a>
<span class="sourceLineNo">046</span>                return array;<a name="line.46"></a>
<span class="sourceLineNo">047</span>        }<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>        @Override<a name="line.49"></a>
<span class="sourceLineNo">050</span>        public int getDType() {<a name="line.50"></a>
<span class="sourceLineNo">051</span>                return Dataset.ARRAYFLOAT32; // DATA_TYPE<a name="line.51"></a>
<span class="sourceLineNo">052</span>        }<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>        /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>         * Create a null dataset<a name="line.55"></a>
<span class="sourceLineNo">056</span>         */<a name="line.56"></a>
<span class="sourceLineNo">057</span>        CompoundFloatDataset() {<a name="line.57"></a>
<span class="sourceLineNo">058</span>        }<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>        /**<a name="line.60"></a>
<span class="sourceLineNo">061</span>         * Create a null dataset<a name="line.61"></a>
<span class="sourceLineNo">062</span>         * @param itemSize<a name="line.62"></a>
<span class="sourceLineNo">063</span>         */<a name="line.63"></a>
<span class="sourceLineNo">064</span>        CompoundFloatDataset(final int itemSize) {<a name="line.64"></a>
<span class="sourceLineNo">065</span>                isize = itemSize;<a name="line.65"></a>
<span class="sourceLineNo">066</span>        }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>        /**<a name="line.68"></a>
<span class="sourceLineNo">069</span>         * Create a zero-filled dataset of given item size and shape<a name="line.69"></a>
<span class="sourceLineNo">070</span>         * @param itemSize<a name="line.70"></a>
<span class="sourceLineNo">071</span>         * @param shape<a name="line.71"></a>
<span class="sourceLineNo">072</span>         */<a name="line.72"></a>
<span class="sourceLineNo">073</span>        CompoundFloatDataset(final int itemSize, final int[] shape) {<a name="line.73"></a>
<span class="sourceLineNo">074</span>                isize = itemSize;<a name="line.74"></a>
<span class="sourceLineNo">075</span>                if (shape != null) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>                        size = ShapeUtils.calcSize(shape);<a name="line.76"></a>
<span class="sourceLineNo">077</span>                        this.shape = shape.clone();<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>                        try {<a name="line.79"></a>
<span class="sourceLineNo">080</span>                                odata = data = createArray(size);<a name="line.80"></a>
<span class="sourceLineNo">081</span>                        } catch (Throwable t) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>                                logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.82"></a>
<span class="sourceLineNo">083</span>                                throw new IllegalArgumentException(t);<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>        }<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>        /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>         * Copy a dataset<a name="line.89"></a>
<span class="sourceLineNo">090</span>         * @param dataset<a name="line.90"></a>
<span class="sourceLineNo">091</span>         */<a name="line.91"></a>
<span class="sourceLineNo">092</span>        CompoundFloatDataset(final CompoundFloatDataset dataset) {<a name="line.92"></a>
<span class="sourceLineNo">093</span>                isize = dataset.isize;<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>                copyToView(dataset, this, true, true);<a name="line.95"></a>
<span class="sourceLineNo">096</span>                try {<a name="line.96"></a>
<span class="sourceLineNo">097</span>                        if (dataset.stride == null) {<a name="line.97"></a>
<span class="sourceLineNo">098</span>                                if (dataset.data != null) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                                        odata = data = dataset.data.clone();<a name="line.99"></a>
<span class="sourceLineNo">100</span>                                }<a name="line.100"></a>
<span class="sourceLineNo">101</span>                        } else {<a name="line.101"></a>
<span class="sourceLineNo">102</span>                                offset = 0;<a name="line.102"></a>
<span class="sourceLineNo">103</span>                                stride = null;<a name="line.103"></a>
<span class="sourceLineNo">104</span>                                base = null;<a name="line.104"></a>
<span class="sourceLineNo">105</span>                                odata = data = createArray(size);<a name="line.105"></a>
<span class="sourceLineNo">106</span>                                IndexIterator iter = dataset.getIterator();<a name="line.106"></a>
<span class="sourceLineNo">107</span>                                for (int j = 0; iter.hasNext();) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>                                                data[j++] = dataset.data[iter.index + i];<a name="line.109"></a>
<span class="sourceLineNo">110</span>                                        }<a name="line.110"></a>
<span class="sourceLineNo">111</span>                                }<a name="line.111"></a>
<span class="sourceLineNo">112</span>                        }<a name="line.112"></a>
<span class="sourceLineNo">113</span>                } catch (Throwable t) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.114"></a>
<span class="sourceLineNo">115</span>                        throw new IllegalArgumentException(t);<a name="line.115"></a>
<span class="sourceLineNo">116</span>                }<a name="line.116"></a>
<span class="sourceLineNo">117</span>        }<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>        /**<a name="line.119"></a>
<span class="sourceLineNo">120</span>         * Create a dataset using given dataset<a name="line.120"></a>
<span class="sourceLineNo">121</span>         * @param dataset<a name="line.121"></a>
<span class="sourceLineNo">122</span>         */<a name="line.122"></a>
<span class="sourceLineNo">123</span>        CompoundFloatDataset(final CompoundDataset dataset) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                copyToView(dataset, this, true, false);<a name="line.124"></a>
<span class="sourceLineNo">125</span>                offset = 0;<a name="line.125"></a>
<span class="sourceLineNo">126</span>                stride = null;<a name="line.126"></a>
<span class="sourceLineNo">127</span>                base = null;<a name="line.127"></a>
<span class="sourceLineNo">128</span>                isize = dataset.getElementsPerItem();<a name="line.128"></a>
<span class="sourceLineNo">129</span>                try {<a name="line.129"></a>
<span class="sourceLineNo">130</span>                        odata = data = createArray(size);<a name="line.130"></a>
<span class="sourceLineNo">131</span>                } catch (Throwable t) {<a name="line.131"></a>
<span class="sourceLineNo">132</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.132"></a>
<span class="sourceLineNo">133</span>                        throw new IllegalArgumentException(t);<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>                IndexIterator iter = dataset.getIterator();<a name="line.136"></a>
<span class="sourceLineNo">137</span>                for (int j = 0; iter.hasNext();) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.138"></a>
<span class="sourceLineNo">139</span>                                data[j++] = (float) dataset.getElementDoubleAbs(iter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.139"></a>
<span class="sourceLineNo">140</span>                        }<a name="line.140"></a>
<span class="sourceLineNo">141</span>                }<a name="line.141"></a>
<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        /**<a name="line.144"></a>
<span class="sourceLineNo">145</span>         * Create a dataset using given data (elements are grouped together)<a name="line.145"></a>
<span class="sourceLineNo">146</span>         * @param itemSize<a name="line.146"></a>
<span class="sourceLineNo">147</span>         * @param data<a name="line.147"></a>
<span class="sourceLineNo">148</span>         * @param shape<a name="line.148"></a>
<span class="sourceLineNo">149</span>         *            (can be null to create 1D dataset)<a name="line.149"></a>
<span class="sourceLineNo">150</span>         */<a name="line.150"></a>
<span class="sourceLineNo">151</span>        CompoundFloatDataset(final int itemSize, final float[] data, int... shape) { // PRIM_TYPE<a name="line.151"></a>
<span class="sourceLineNo">152</span>                isize = itemSize;<a name="line.152"></a>
<span class="sourceLineNo">153</span>                if (data != null) {<a name="line.153"></a>
<span class="sourceLineNo">154</span>                        if (shape == null || (shape.length == 0 &amp;&amp; data.length &gt; isize)) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>                                shape = new int[] { data.length / isize };<a name="line.155"></a>
<span class="sourceLineNo">156</span>                        }<a name="line.156"></a>
<span class="sourceLineNo">157</span>                        size = ShapeUtils.calcSize(shape);<a name="line.157"></a>
<span class="sourceLineNo">158</span>                        if (size * isize != data.length) {<a name="line.158"></a>
<span class="sourceLineNo">159</span>                                throw new IllegalArgumentException(String.format("Shape %s is not compatible with size of data array, %d",<a name="line.159"></a>
<span class="sourceLineNo">160</span>                                                Arrays.toString(shape), data.length / isize));<a name="line.160"></a>
<span class="sourceLineNo">161</span>                        }<a name="line.161"></a>
<span class="sourceLineNo">162</span>                        this.shape = size == 0 ? null : shape.clone();<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>                        odata = this.data = data;<a name="line.164"></a>
<span class="sourceLineNo">165</span>                }<a name="line.165"></a>
<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>        /**<a name="line.168"></a>
<span class="sourceLineNo">169</span>         * Create a dataset using given datasets<a name="line.169"></a>
<span class="sourceLineNo">170</span>         * @param datasets<a name="line.170"></a>
<span class="sourceLineNo">171</span>         */<a name="line.171"></a>
<span class="sourceLineNo">172</span>        CompoundFloatDataset(final Dataset... datasets) {<a name="line.172"></a>
<span class="sourceLineNo">173</span>                if (datasets.length &lt; 1) {<a name="line.173"></a>
<span class="sourceLineNo">174</span>                        throw new IllegalArgumentException("Array of datasets must have length greater than zero");<a name="line.174"></a>
<span class="sourceLineNo">175</span>                }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>                for (int i = 1; i &lt; datasets.length; i++) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        datasets[0].checkCompatibility(datasets[i]);<a name="line.178"></a>
<span class="sourceLineNo">179</span>                }<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>                isize = datasets.length;<a name="line.181"></a>
<span class="sourceLineNo">182</span>                size = ShapeUtils.calcSize(datasets[0].getShapeRef());<a name="line.182"></a>
<span class="sourceLineNo">183</span>                shape = datasets[0].getShape();<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>                try {<a name="line.185"></a>
<span class="sourceLineNo">186</span>                        odata = data = createArray(size);<a name="line.186"></a>
<span class="sourceLineNo">187</span>                } catch (Throwable t) {<a name="line.187"></a>
<span class="sourceLineNo">188</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.188"></a>
<span class="sourceLineNo">189</span>                        throw new IllegalArgumentException(t);<a name="line.189"></a>
<span class="sourceLineNo">190</span>                }<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>                IndexIterator[] iters = new IndexIterator[isize];<a name="line.192"></a>
<span class="sourceLineNo">193</span>                for (int i = 0; i &lt; datasets.length; i++) {<a name="line.193"></a>
<span class="sourceLineNo">194</span>                        iters[i] = datasets[i].getIterator();<a name="line.194"></a>
<span class="sourceLineNo">195</span>                }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>                for (int j = 0; iters[0].hasNext();) {<a name="line.197"></a>
<span class="sourceLineNo">198</span>                        data[j++] = (float) datasets[0].getElementDoubleAbs(iters[0].index); // GET_ELEMENT_WITH_CAST<a name="line.198"></a>
<span class="sourceLineNo">199</span>                        for (int i = 1; i &lt; datasets.length; i++) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>                                iters[i].hasNext();<a name="line.200"></a>
<span class="sourceLineNo">201</span>                                data[j++] = (float) datasets[i].getElementDoubleAbs(iters[i].index); // GET_ELEMENT_WITH_CAST<a name="line.201"></a>
<span class="sourceLineNo">202</span>                        }<a name="line.202"></a>
<span class="sourceLineNo">203</span>                }<a name="line.203"></a>
<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>        /**<a name="line.206"></a>
<span class="sourceLineNo">207</span>         * Cast a dataset to this compound type. If repeat is set, the first element of each item in the given dataset is<a name="line.207"></a>
<span class="sourceLineNo">208</span>         * repeated across all elements of an item. Otherwise, each item comprises a truncated or zero-padded copy of<a name="line.208"></a>
<span class="sourceLineNo">209</span>         * elements from the given dataset.<a name="line.209"></a>
<span class="sourceLineNo">210</span>         * @param itemSize<a name="line.210"></a>
<span class="sourceLineNo">211</span>         * @param repeat<a name="line.211"></a>
<span class="sourceLineNo">212</span>         *            repeat first element<a name="line.212"></a>
<span class="sourceLineNo">213</span>         * @param dataset<a name="line.213"></a>
<span class="sourceLineNo">214</span>         */<a name="line.214"></a>
<span class="sourceLineNo">215</span>        CompoundFloatDataset(final int itemSize, final boolean repeat, final Dataset dataset) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                isize = itemSize;<a name="line.216"></a>
<span class="sourceLineNo">217</span>                size = dataset.getSize();<a name="line.217"></a>
<span class="sourceLineNo">218</span>                shape = dataset.getShape();<a name="line.218"></a>
<span class="sourceLineNo">219</span>                name = new String(dataset.getName());<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>                try {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        odata = data = createArray(size);<a name="line.222"></a>
<span class="sourceLineNo">223</span>                } catch (Throwable t) {<a name="line.223"></a>
<span class="sourceLineNo">224</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.224"></a>
<span class="sourceLineNo">225</span>                        throw new IllegalArgumentException(t);<a name="line.225"></a>
<span class="sourceLineNo">226</span>                }<a name="line.226"></a>
<span class="sourceLineNo">227</span>                final int os = dataset.getElementsPerItem();<a name="line.227"></a>
<span class="sourceLineNo">228</span><a name="line.228"></a>
<span class="sourceLineNo">229</span>                IndexIterator iter = dataset.getIterator();<a name="line.229"></a>
<span class="sourceLineNo">230</span>                if (repeat) {<a name="line.230"></a>
<span class="sourceLineNo">231</span>                        int i = 0;<a name="line.231"></a>
<span class="sourceLineNo">232</span>                        while (iter.hasNext()) {<a name="line.232"></a>
<span class="sourceLineNo">233</span>                                final float v = (float) dataset.getElementDoubleAbs(iter.index); // PRIM_TYPE // GET_ELEMENT_WITH_CAST<a name="line.233"></a>
<span class="sourceLineNo">234</span>                                for (int k = 0; k &lt; isize; k++) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>                                        data[i++] = v;<a name="line.235"></a>
<span class="sourceLineNo">236</span>                                }<a name="line.236"></a>
<span class="sourceLineNo">237</span>                        }<a name="line.237"></a>
<span class="sourceLineNo">238</span>                } else {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                        final int kmax = Math.min(isize, os);<a name="line.239"></a>
<span class="sourceLineNo">240</span>                        int i = 0;<a name="line.240"></a>
<span class="sourceLineNo">241</span>                        while (iter.hasNext()) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>                                for (int k = 0; k &lt; kmax; k++) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                                        data[i + k] = (float) dataset.getElementDoubleAbs(iter.index + k); // GET_ELEMENT_WITH_CAST<a name="line.243"></a>
<span class="sourceLineNo">244</span>                                }<a name="line.244"></a>
<span class="sourceLineNo">245</span>                                i += isize;<a name="line.245"></a>
<span class="sourceLineNo">246</span>                        }<a name="line.246"></a>
<span class="sourceLineNo">247</span>                }<a name="line.247"></a>
<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>        @Override<a name="line.250"></a>
<span class="sourceLineNo">251</span>        public boolean equals(Object obj) {<a name="line.251"></a>
<span class="sourceLineNo">252</span>                if (!super.equals(obj)) {<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        return false;<a name="line.253"></a>
<span class="sourceLineNo">254</span>                }<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>                if (getRank() == 0 &amp;&amp; !getClass().equals(obj.getClass())) // already true for zero-rank dataset<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        return true;<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>                CompoundFloatDataset other = (CompoundFloatDataset) obj;<a name="line.259"></a>
<span class="sourceLineNo">260</span>                IndexIterator iter = getIterator();<a name="line.260"></a>
<span class="sourceLineNo">261</span>                IndexIterator oiter = other.getIterator();<a name="line.261"></a>
<span class="sourceLineNo">262</span>                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>                                if (data[iter.index+j] != other.data[oiter.index+j])<a name="line.264"></a>
<span class="sourceLineNo">265</span>                                        return false;<a name="line.265"></a>
<span class="sourceLineNo">266</span>                        }<a name="line.266"></a>
<span class="sourceLineNo">267</span>                }<a name="line.267"></a>
<span class="sourceLineNo">268</span>                return true;<a name="line.268"></a>
<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>        @Override<a name="line.271"></a>
<span class="sourceLineNo">272</span>        public int hashCode() {<a name="line.272"></a>
<span class="sourceLineNo">273</span>                return super.hashCode();<a name="line.273"></a>
<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
<span class="sourceLineNo">275</span><a name="line.275"></a>
<span class="sourceLineNo">276</span>        @Override<a name="line.276"></a>
<span class="sourceLineNo">277</span>        public CompoundFloatDataset clone() {<a name="line.277"></a>
<span class="sourceLineNo">278</span>                return new CompoundFloatDataset(this);<a name="line.278"></a>
<span class="sourceLineNo">279</span>        }<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>        /**<a name="line.281"></a>
<span class="sourceLineNo">282</span>         * Create a dataset from an object which could be a Java list, array (of arrays...) or Number. Ragged<a name="line.282"></a>
<span class="sourceLineNo">283</span>         * sequences or arrays are padded with zeros. The item size is the last dimension of the corresponding<a name="line.283"></a>
<span class="sourceLineNo">284</span>         * elemental dataset<a name="line.284"></a>
<span class="sourceLineNo">285</span>         *<a name="line.285"></a>
<span class="sourceLineNo">286</span>         * @param obj<a name="line.286"></a>
<span class="sourceLineNo">287</span>         * @return dataset with contents given by input<a name="line.287"></a>
<span class="sourceLineNo">288</span>         */<a name="line.288"></a>
<span class="sourceLineNo">289</span>        static CompoundFloatDataset createFromObject(final Object obj) {<a name="line.289"></a>
<span class="sourceLineNo">290</span>                FloatDataset result = FloatDataset.createFromObject(obj); // CLASS_TYPE<a name="line.290"></a>
<span class="sourceLineNo">291</span>                return (CompoundFloatDataset) DatasetUtils.createCompoundDatasetFromLastAxis(result, true);<a name="line.291"></a>
<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>        /**<a name="line.294"></a>
<span class="sourceLineNo">295</span>         * Create a 1D dataset from an object which could be a Java list, array (of arrays...) or Number. Ragged<a name="line.295"></a>
<span class="sourceLineNo">296</span>         * sequences or arrays are padded with zeros.<a name="line.296"></a>
<span class="sourceLineNo">297</span>         *<a name="line.297"></a>
<span class="sourceLineNo">298</span>         * @param itemSize<a name="line.298"></a>
<span class="sourceLineNo">299</span>         * @param obj<a name="line.299"></a>
<span class="sourceLineNo">300</span>         * @return dataset with contents given by input<a name="line.300"></a>
<span class="sourceLineNo">301</span>         */<a name="line.301"></a>
<span class="sourceLineNo">302</span>        public static CompoundFloatDataset createFromObject(final int itemSize, final Object obj) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>                FloatDataset result = FloatDataset.createFromObject(obj); // CLASS_TYPE<a name="line.303"></a>
<span class="sourceLineNo">304</span>                return new CompoundFloatDataset(itemSize, result.getData(), null);<a name="line.304"></a>
<span class="sourceLineNo">305</span>        }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>        /**<a name="line.307"></a>
<span class="sourceLineNo">308</span>         * @param stop<a name="line.308"></a>
<span class="sourceLineNo">309</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.309"></a>
<span class="sourceLineNo">310</span>         */<a name="line.310"></a>
<span class="sourceLineNo">311</span>        static CompoundFloatDataset createRange(final int itemSize, final double stop) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                return createRange(itemSize, 0., stop, 1.);<a name="line.312"></a>
<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>        /**<a name="line.315"></a>
<span class="sourceLineNo">316</span>         * @param start<a name="line.316"></a>
<span class="sourceLineNo">317</span>         * @param stop<a name="line.317"></a>
<span class="sourceLineNo">318</span>         * @param step<a name="line.318"></a>
<span class="sourceLineNo">319</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.319"></a>
<span class="sourceLineNo">320</span>         */<a name="line.320"></a>
<span class="sourceLineNo">321</span>        static CompoundFloatDataset createRange(final int itemSize, final double start, final double stop,<a name="line.321"></a>
<span class="sourceLineNo">322</span>                        final double step) {<a name="line.322"></a>
<span class="sourceLineNo">323</span>                int size = calcSteps(start, stop, step);<a name="line.323"></a>
<span class="sourceLineNo">324</span>                CompoundFloatDataset result = new CompoundFloatDataset(itemSize, new int[] { size });<a name="line.324"></a>
<span class="sourceLineNo">325</span>                for (int i = 0; i &lt; size; i++) {<a name="line.325"></a>
<span class="sourceLineNo">326</span>                        result.data[i * result.isize] = (float) (start + i * step); // PRIM_TYPE // ADD_CAST<a name="line.326"></a>
<span class="sourceLineNo">327</span>                }<a name="line.327"></a>
<span class="sourceLineNo">328</span>                return result;<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>        /**<a name="line.331"></a>
<span class="sourceLineNo">332</span>         * @param shape<a name="line.332"></a>
<span class="sourceLineNo">333</span>         * @return a dataset filled with ones<a name="line.333"></a>
<span class="sourceLineNo">334</span>         */<a name="line.334"></a>
<span class="sourceLineNo">335</span>        static CompoundFloatDataset ones(final int itemSize, final int... shape) {<a name="line.335"></a>
<span class="sourceLineNo">336</span>                return new CompoundFloatDataset(itemSize, shape).fill(1);<a name="line.336"></a>
<span class="sourceLineNo">337</span>        }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>        /**<a name="line.339"></a>
<span class="sourceLineNo">340</span>         * Create a compound dataset using last dimension of given dataset<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * @param a<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * @param shareData<a name="line.342"></a>
<span class="sourceLineNo">343</span>         * @return compound dataset<a name="line.343"></a>
<span class="sourceLineNo">344</span>         */<a name="line.344"></a>
<span class="sourceLineNo">345</span>        public static CompoundFloatDataset createCompoundDatasetWithLastDimension(final Dataset a, final boolean shareData) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                if (a.getElementsPerItem() != 1) {<a name="line.346"></a>
<span class="sourceLineNo">347</span>                        logger.error("Need a single-element dataset");<a name="line.347"></a>
<span class="sourceLineNo">348</span>                        throw new IllegalArgumentException("Need a single-element dataset");<a name="line.348"></a>
<span class="sourceLineNo">349</span>                }<a name="line.349"></a>
<span class="sourceLineNo">350</span>                if (a.getDType() != Dataset.FLOAT32) { // DATA_TYPE<a name="line.350"></a>
<span class="sourceLineNo">351</span>                        logger.error("Dataset type must be float"); // PRIM_TYPE<a name="line.351"></a>
<span class="sourceLineNo">352</span>                        throw new IllegalArgumentException("Dataset type must be float"); // PRIM_TYPE<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>                final int[] shape = a.getShapeRef();<a name="line.355"></a>
<span class="sourceLineNo">356</span>                if (shape == null) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>                        return new CompoundFloatDataset(0);<a name="line.357"></a>
<span class="sourceLineNo">358</span>                }<a name="line.358"></a>
<span class="sourceLineNo">359</span><a name="line.359"></a>
<span class="sourceLineNo">360</span>                final int rank = shape.length - 1;<a name="line.360"></a>
<span class="sourceLineNo">361</span>                final int is = rank &lt; 0 ? 1 : shape[rank];<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>                CompoundFloatDataset result = new CompoundFloatDataset(is);<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>                result.shape = rank &gt; 0 ? Arrays.copyOf(shape, rank) : (rank &lt; 0 ? new int[] {} : new int[] {1});<a name="line.365"></a>
<span class="sourceLineNo">366</span>                result.size = ShapeUtils.calcSize(result.shape);<a name="line.366"></a>
<span class="sourceLineNo">367</span>                result.odata = shareData ? a.getBuffer() : a.clone().getBuffer();<a name="line.367"></a>
<span class="sourceLineNo">368</span>                result.setName(a.getName());<a name="line.368"></a>
<span class="sourceLineNo">369</span>                result.setData();<a name="line.369"></a>
<span class="sourceLineNo">370</span>                return result;<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>        @Override<a name="line.373"></a>
<span class="sourceLineNo">374</span>        public FloatDataset asNonCompoundDataset(final boolean shareData) { // CLASS_TYPE<a name="line.374"></a>
<span class="sourceLineNo">375</span>                FloatDataset result = new FloatDataset(); // CLASS_TYPE<a name="line.375"></a>
<span class="sourceLineNo">376</span>                final int is = getElementsPerItem();<a name="line.376"></a>
<span class="sourceLineNo">377</span>                final int rank = is == 1 ? shape.length : shape.length + 1;<a name="line.377"></a>
<span class="sourceLineNo">378</span>                final int[] nshape = Arrays.copyOf(shape, rank);<a name="line.378"></a>
<span class="sourceLineNo">379</span>                if (is != 1)<a name="line.379"></a>
<span class="sourceLineNo">380</span>                        nshape[rank-1] = is;<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>                result.shape = nshape;<a name="line.382"></a>
<span class="sourceLineNo">383</span>                result.size = ShapeUtils.calcSize(nshape);<a name="line.383"></a>
<span class="sourceLineNo">384</span>                result.odata = shareData ? data : data.clone();<a name="line.384"></a>
<span class="sourceLineNo">385</span>                result.setName(name);<a name="line.385"></a>
<span class="sourceLineNo">386</span>                result.setData();<a name="line.386"></a>
<span class="sourceLineNo">387</span>                return result;<a name="line.387"></a>
<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>        @Override<a name="line.390"></a>
<span class="sourceLineNo">391</span>        public CompoundFloatDataset fill(final Object obj) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                setDirty();<a name="line.392"></a>
<span class="sourceLineNo">393</span>                float[] vr = DTypeUtils.toFloatArray(obj, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.393"></a>
<span class="sourceLineNo">394</span>                IndexIterator iter = getIterator();<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>                while (iter.hasNext()) {<a name="line.396"></a>
<span class="sourceLineNo">397</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>                                data[iter.index + i] = vr[i]; // PRIM_TYPE<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        }<a name="line.399"></a>
<span class="sourceLineNo">400</span>                }<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>                return this;<a name="line.402"></a>
<span class="sourceLineNo">403</span>        }<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>        /**<a name="line.405"></a>
<span class="sourceLineNo">406</span>         * This is a typed version of {@link #getBuffer()}<a name="line.406"></a>
<span class="sourceLineNo">407</span>         * @return data buffer as linear array<a name="line.407"></a>
<span class="sourceLineNo">408</span>         */<a name="line.408"></a>
<span class="sourceLineNo">409</span>        public float[] getData() { // PRIM_TYPE<a name="line.409"></a>
<span class="sourceLineNo">410</span>                return data;<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>        @Override<a name="line.413"></a>
<span class="sourceLineNo">414</span>        protected int getBufferLength() {<a name="line.414"></a>
<span class="sourceLineNo">415</span>                if (data == null)<a name="line.415"></a>
<span class="sourceLineNo">416</span>                        return 0;<a name="line.416"></a>
<span class="sourceLineNo">417</span>                return data.length;<a name="line.417"></a>
<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>        @Override<a name="line.420"></a>
<span class="sourceLineNo">421</span>        public CompoundFloatDataset getView(boolean deepCopyMetadata) {<a name="line.421"></a>
<span class="sourceLineNo">422</span>                CompoundFloatDataset view = new CompoundFloatDataset(isize);<a name="line.422"></a>
<span class="sourceLineNo">423</span>                copyToView(this, view, true, deepCopyMetadata);<a name="line.423"></a>
<span class="sourceLineNo">424</span>                view.setData();<a name="line.424"></a>
<span class="sourceLineNo">425</span>                return view;<a name="line.425"></a>
<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>        /**<a name="line.428"></a>
<span class="sourceLineNo">429</span>         * Get values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.429"></a>
<span class="sourceLineNo">430</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.430"></a>
<span class="sourceLineNo">431</span>         *<a name="line.431"></a>
<span class="sourceLineNo">432</span>         * @param index<a name="line.432"></a>
<span class="sourceLineNo">433</span>         *            absolute index<a name="line.433"></a>
<span class="sourceLineNo">434</span>         * @return values<a name="line.434"></a>
<span class="sourceLineNo">435</span>         */<a name="line.435"></a>
<span class="sourceLineNo">436</span>        public float[] getAbs(final int index) { // PRIM_TYPE<a name="line.436"></a>
<span class="sourceLineNo">437</span>                float[] result = new float[isize]; // PRIM_TYPE<a name="line.437"></a>
<span class="sourceLineNo">438</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.438"></a>
<span class="sourceLineNo">439</span>                        result[i] = data[index + i];<a name="line.439"></a>
<span class="sourceLineNo">440</span>                }<a name="line.440"></a>
<span class="sourceLineNo">441</span>                return result;<a name="line.441"></a>
<span class="sourceLineNo">442</span>        }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>        /**<a name="line.444"></a>
<span class="sourceLineNo">445</span>         * Get values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.445"></a>
<span class="sourceLineNo">446</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.446"></a>
<span class="sourceLineNo">447</span>         *<a name="line.447"></a>
<span class="sourceLineNo">448</span>         * @param index<a name="line.448"></a>
<span class="sourceLineNo">449</span>         *            absolute index<a name="line.449"></a>
<span class="sourceLineNo">450</span>         * @param values<a name="line.450"></a>
<span class="sourceLineNo">451</span>         */<a name="line.451"></a>
<span class="sourceLineNo">452</span>        public void getAbs(final int index, final float[] values) { // PRIM_TYPE<a name="line.452"></a>
<span class="sourceLineNo">453</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>                        values[i] = data[index + i];<a name="line.454"></a>
<span class="sourceLineNo">455</span>                }<a name="line.455"></a>
<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
<span class="sourceLineNo">457</span><a name="line.457"></a>
<span class="sourceLineNo">458</span>        @Override<a name="line.458"></a>
<span class="sourceLineNo">459</span>        public boolean getElementBooleanAbs(final int index) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>                return data[index] != 0;<a name="line.460"></a>
<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>        @Override<a name="line.463"></a>
<span class="sourceLineNo">464</span>        public double getElementDoubleAbs(final int index) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>                return data[index];<a name="line.465"></a>
<span class="sourceLineNo">466</span>        }<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
<span class="sourceLineNo">469</span>        public long getElementLongAbs(final int index) {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                return DTypeUtils.toLong(data[index]); // OMIT_TOLONG_INT<a name="line.470"></a>
<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>        @Override<a name="line.473"></a>
<span class="sourceLineNo">474</span>        protected void setItemDirect(final int dindex, final int sindex, final Object src) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>                setDirty();<a name="line.475"></a>
<span class="sourceLineNo">476</span>                float[] dsrc = (float[]) src; // PRIM_TYPE<a name="line.476"></a>
<span class="sourceLineNo">477</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.477"></a>
<span class="sourceLineNo">478</span>                        data[dindex + i] = dsrc[sindex + i];<a name="line.478"></a>
<span class="sourceLineNo">479</span>                }<a name="line.479"></a>
<span class="sourceLineNo">480</span>        }<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>         * Set values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.483"></a>
<span class="sourceLineNo">484</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.484"></a>
<span class="sourceLineNo">485</span>         *<a name="line.485"></a>
<span class="sourceLineNo">486</span>         * @param index<a name="line.486"></a>
<span class="sourceLineNo">487</span>         *            absolute index<a name="line.487"></a>
<span class="sourceLineNo">488</span>         * @param val<a name="line.488"></a>
<span class="sourceLineNo">489</span>         *            new values<a name="line.489"></a>
<span class="sourceLineNo">490</span>         */<a name="line.490"></a>
<span class="sourceLineNo">491</span>        public void setAbs(final int index, final float[] val) { // PRIM_TYPE<a name="line.491"></a>
<span class="sourceLineNo">492</span>                setDirty();<a name="line.492"></a>
<span class="sourceLineNo">493</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                        data[index + i] = val[i];<a name="line.494"></a>
<span class="sourceLineNo">495</span>                }<a name="line.495"></a>
<span class="sourceLineNo">496</span>        }<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>         * Set element value at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.499"></a>
<span class="sourceLineNo">500</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.500"></a>
<span class="sourceLineNo">501</span>         *<a name="line.501"></a>
<span class="sourceLineNo">502</span>         * @param index<a name="line.502"></a>
<span class="sourceLineNo">503</span>         *            absolute index<a name="line.503"></a>
<span class="sourceLineNo">504</span>         * @param val<a name="line.504"></a>
<span class="sourceLineNo">505</span>         *            new value<a name="line.505"></a>
<span class="sourceLineNo">506</span>         */<a name="line.506"></a>
<span class="sourceLineNo">507</span>        public void setAbs(final int index, final float val) { // PRIM_TYPE<a name="line.507"></a>
<span class="sourceLineNo">508</span>                setDirty();<a name="line.508"></a>
<span class="sourceLineNo">509</span>                data[index] = val;<a name="line.509"></a>
<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>        @Override<a name="line.512"></a>
<span class="sourceLineNo">513</span>        public Object getObject() {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                return getFloatArray(); // PRIM_TYPE<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>        @Override<a name="line.517"></a>
<span class="sourceLineNo">518</span>        public Object getObject(final int i) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                return getFloatArray(i); // PRIM_TYPE<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>        @Override<a name="line.522"></a>
<span class="sourceLineNo">523</span>        public Object getObject(final int i, final int j) {<a name="line.523"></a>
<span class="sourceLineNo">524</span>                return getFloatArray(i, j); // PRIM_TYPE<a name="line.524"></a>
<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>        @Override<a name="line.527"></a>
<span class="sourceLineNo">528</span>        public Object getObject(final int... pos) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                return getFloatArray(pos); // PRIM_TYPE<a name="line.529"></a>
<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>        @Override<a name="line.532"></a>
<span class="sourceLineNo">533</span>        public byte[] getByteArray() {<a name="line.533"></a>
<span class="sourceLineNo">534</span>                byte[] result = new byte[isize];<a name="line.534"></a>
<span class="sourceLineNo">535</span>                int index = getFirst1DIndex();<a name="line.535"></a>
<span class="sourceLineNo">536</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>                        result[k] = (byte) data[index + k]; // OMIT_UPCAST<a name="line.537"></a>
<span class="sourceLineNo">538</span>                }<a name="line.538"></a>
<span class="sourceLineNo">539</span>                return result;<a name="line.539"></a>
<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>        @Override<a name="line.542"></a>
<span class="sourceLineNo">543</span>        public byte[] getByteArray(final int i) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>                byte[] result = new byte[isize];<a name="line.544"></a>
<span class="sourceLineNo">545</span>                int index = get1DIndex(i);<a name="line.545"></a>
<span class="sourceLineNo">546</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>                        result[k] = (byte) data[index + k]; // OMIT_UPCAST<a name="line.547"></a>
<span class="sourceLineNo">548</span>                }<a name="line.548"></a>
<span class="sourceLineNo">549</span>                return result;<a name="line.549"></a>
<span class="sourceLineNo">550</span>        }<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>        @Override<a name="line.552"></a>
<span class="sourceLineNo">553</span>        public byte[] getByteArray(final int i, final int j) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                byte[] result = new byte[isize];<a name="line.554"></a>
<span class="sourceLineNo">555</span>                int index = get1DIndex(i, j);<a name="line.555"></a>
<span class="sourceLineNo">556</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                        result[k] = (byte) data[index + k]; // OMIT_UPCAST<a name="line.557"></a>
<span class="sourceLineNo">558</span>                }<a name="line.558"></a>
<span class="sourceLineNo">559</span>                return result;<a name="line.559"></a>
<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>        @Override<a name="line.562"></a>
<span class="sourceLineNo">563</span>        public byte[] getByteArray(final int... pos) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                byte[] result = new byte[isize];<a name="line.564"></a>
<span class="sourceLineNo">565</span>                int index = get1DIndex(pos);<a name="line.565"></a>
<span class="sourceLineNo">566</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.566"></a>
<span class="sourceLineNo">567</span>                        result[k] = (byte) data[index + k]; // OMIT_UPCAST<a name="line.567"></a>
<span class="sourceLineNo">568</span>                }<a name="line.568"></a>
<span class="sourceLineNo">569</span>                return result;<a name="line.569"></a>
<span class="sourceLineNo">570</span>        }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
<span class="sourceLineNo">572</span>        @Override<a name="line.572"></a>
<span class="sourceLineNo">573</span>        public short[] getShortArray() {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                short[] result = new short[isize];<a name="line.574"></a>
<span class="sourceLineNo">575</span>                int index = getFirst1DIndex();<a name="line.575"></a>
<span class="sourceLineNo">576</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        result[k] = (short) data[index + k]; // OMIT_UPCAST<a name="line.577"></a>
<span class="sourceLineNo">578</span>                }<a name="line.578"></a>
<span class="sourceLineNo">579</span>                return result;<a name="line.579"></a>
<span class="sourceLineNo">580</span>        }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>        @Override<a name="line.582"></a>
<span class="sourceLineNo">583</span>        public short[] getShortArray(final int i) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                short[] result = new short[isize];<a name="line.584"></a>
<span class="sourceLineNo">585</span>                int index = get1DIndex(i);<a name="line.585"></a>
<span class="sourceLineNo">586</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.586"></a>
<span class="sourceLineNo">587</span>                        result[k] = (short) data[index + k]; // OMIT_UPCAST<a name="line.587"></a>
<span class="sourceLineNo">588</span>                }<a name="line.588"></a>
<span class="sourceLineNo">589</span>                return result;<a name="line.589"></a>
<span class="sourceLineNo">590</span>        }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
<span class="sourceLineNo">593</span>        public short[] getShortArray(final int i, final int j) {<a name="line.593"></a>
<span class="sourceLineNo">594</span>                short[] result = new short[isize];<a name="line.594"></a>
<span class="sourceLineNo">595</span>                int index = get1DIndex(i, j);<a name="line.595"></a>
<span class="sourceLineNo">596</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.596"></a>
<span class="sourceLineNo">597</span>                        result[k] = (short) data[index + k]; // OMIT_UPCAST<a name="line.597"></a>
<span class="sourceLineNo">598</span>                }<a name="line.598"></a>
<span class="sourceLineNo">599</span>                return result;<a name="line.599"></a>
<span class="sourceLineNo">600</span>        }<a name="line.600"></a>
<span class="sourceLineNo">601</span><a name="line.601"></a>
<span class="sourceLineNo">602</span>        @Override<a name="line.602"></a>
<span class="sourceLineNo">603</span>        public short[] getShortArray(final int... pos) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>                short[] result = new short[isize];<a name="line.604"></a>
<span class="sourceLineNo">605</span>                int index = get1DIndex(pos);<a name="line.605"></a>
<span class="sourceLineNo">606</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>                        result[k] = (short) data[index + k]; // OMIT_UPCAST<a name="line.607"></a>
<span class="sourceLineNo">608</span>                }<a name="line.608"></a>
<span class="sourceLineNo">609</span>                return result;<a name="line.609"></a>
<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
<span class="sourceLineNo">611</span><a name="line.611"></a>
<span class="sourceLineNo">612</span>        @Override<a name="line.612"></a>
<span class="sourceLineNo">613</span>        public int[] getIntArray() {<a name="line.613"></a>
<span class="sourceLineNo">614</span>                int[] result = new int[isize];<a name="line.614"></a>
<span class="sourceLineNo">615</span>                int index = getFirst1DIndex();<a name="line.615"></a>
<span class="sourceLineNo">616</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>                        result[k] = (int) data[index + k]; // OMIT_UPCAST<a name="line.617"></a>
<span class="sourceLineNo">618</span>                }<a name="line.618"></a>
<span class="sourceLineNo">619</span>                return result;<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>        @Override<a name="line.622"></a>
<span class="sourceLineNo">623</span>        public int[] getIntArray(final int i) {<a name="line.623"></a>
<span class="sourceLineNo">624</span>                int[] result = new int[isize];<a name="line.624"></a>
<span class="sourceLineNo">625</span>                int index = get1DIndex(i);<a name="line.625"></a>
<span class="sourceLineNo">626</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.626"></a>
<span class="sourceLineNo">627</span>                        result[k] = (int) data[index + k]; // OMIT_UPCAST<a name="line.627"></a>
<span class="sourceLineNo">628</span>                }<a name="line.628"></a>
<span class="sourceLineNo">629</span>                return result;<a name="line.629"></a>
<span class="sourceLineNo">630</span>        }<a name="line.630"></a>
<span class="sourceLineNo">631</span><a name="line.631"></a>
<span class="sourceLineNo">632</span>        @Override<a name="line.632"></a>
<span class="sourceLineNo">633</span>        public int[] getIntArray(final int i, final int j) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>                int[] result = new int[isize];<a name="line.634"></a>
<span class="sourceLineNo">635</span>                int index = get1DIndex(i, j);<a name="line.635"></a>
<span class="sourceLineNo">636</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.636"></a>
<span class="sourceLineNo">637</span>                        result[k] = (int) data[index + k]; // OMIT_UPCAST<a name="line.637"></a>
<span class="sourceLineNo">638</span>                }<a name="line.638"></a>
<span class="sourceLineNo">639</span>                return result;<a name="line.639"></a>
<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>        @Override<a name="line.642"></a>
<span class="sourceLineNo">643</span>        public int[] getIntArray(final int... pos) {<a name="line.643"></a>
<span class="sourceLineNo">644</span>                int[] result = new int[isize];<a name="line.644"></a>
<span class="sourceLineNo">645</span>                int index = get1DIndex(pos);<a name="line.645"></a>
<span class="sourceLineNo">646</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>                        result[k] = (int) data[index + k]; // OMIT_UPCAST<a name="line.647"></a>
<span class="sourceLineNo">648</span>                }<a name="line.648"></a>
<span class="sourceLineNo">649</span>                return result;<a name="line.649"></a>
<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>        @Override<a name="line.652"></a>
<span class="sourceLineNo">653</span>        public long[] getLongArray() {<a name="line.653"></a>
<span class="sourceLineNo">654</span>                long[] result = new long[isize];<a name="line.654"></a>
<span class="sourceLineNo">655</span>                int index = getFirst1DIndex();<a name="line.655"></a>
<span class="sourceLineNo">656</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.656"></a>
<span class="sourceLineNo">657</span>                        result[k] = (long) data[index + k]; // OMIT_UPCAST<a name="line.657"></a>
<span class="sourceLineNo">658</span>                }<a name="line.658"></a>
<span class="sourceLineNo">659</span>                return result;<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>        @Override<a name="line.662"></a>
<span class="sourceLineNo">663</span>        public long[] getLongArray(final int i) {<a name="line.663"></a>
<span class="sourceLineNo">664</span>                long[] result = new long[isize];<a name="line.664"></a>
<span class="sourceLineNo">665</span>                int index = get1DIndex(i);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.666"></a>
<span class="sourceLineNo">667</span>                        result[k] = (long) data[index + k]; // OMIT_UPCAST<a name="line.667"></a>
<span class="sourceLineNo">668</span>                }<a name="line.668"></a>
<span class="sourceLineNo">669</span>                return result;<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>        @Override<a name="line.672"></a>
<span class="sourceLineNo">673</span>        public long[] getLongArray(final int i, final int j) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                long[] result = new long[isize];<a name="line.674"></a>
<span class="sourceLineNo">675</span>                int index = get1DIndex(i, j);<a name="line.675"></a>
<span class="sourceLineNo">676</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        result[k] = (long) data[index + k]; // OMIT_UPCAST<a name="line.677"></a>
<span class="sourceLineNo">678</span>                }<a name="line.678"></a>
<span class="sourceLineNo">679</span>                return result;<a name="line.679"></a>
<span class="sourceLineNo">680</span>        }<a name="line.680"></a>
<span class="sourceLineNo">681</span><a name="line.681"></a>
<span class="sourceLineNo">682</span>        @Override<a name="line.682"></a>
<span class="sourceLineNo">683</span>        public long[] getLongArray(final int... pos) {<a name="line.683"></a>
<span class="sourceLineNo">684</span>                long[] result = new long[isize];<a name="line.684"></a>
<span class="sourceLineNo">685</span>                int index = get1DIndex(pos);<a name="line.685"></a>
<span class="sourceLineNo">686</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>                        result[k] = (long) data[index + k]; // OMIT_UPCAST<a name="line.687"></a>
<span class="sourceLineNo">688</span>                }<a name="line.688"></a>
<span class="sourceLineNo">689</span>                return result;<a name="line.689"></a>
<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>        @Override<a name="line.692"></a>
<span class="sourceLineNo">693</span>        public float[] getFloatArray() {<a name="line.693"></a>
<span class="sourceLineNo">694</span>                float[] result = new float[isize];<a name="line.694"></a>
<span class="sourceLineNo">695</span>                int index = getFirst1DIndex();<a name="line.695"></a>
<span class="sourceLineNo">696</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.697"></a>
<span class="sourceLineNo">698</span>                }<a name="line.698"></a>
<span class="sourceLineNo">699</span>                return result;<a name="line.699"></a>
<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>        @Override<a name="line.702"></a>
<span class="sourceLineNo">703</span>        public float[] getFloatArray(final int i) {<a name="line.703"></a>
<span class="sourceLineNo">704</span>                float[] result = new float[isize];<a name="line.704"></a>
<span class="sourceLineNo">705</span>                int index = get1DIndex(i);<a name="line.705"></a>
<span class="sourceLineNo">706</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.706"></a>
<span class="sourceLineNo">707</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.707"></a>
<span class="sourceLineNo">708</span>                }<a name="line.708"></a>
<span class="sourceLineNo">709</span>                return result;<a name="line.709"></a>
<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
<span class="sourceLineNo">711</span><a name="line.711"></a>
<span class="sourceLineNo">712</span>        @Override<a name="line.712"></a>
<span class="sourceLineNo">713</span>        public float[] getFloatArray(final int i, final int j) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>                float[] result = new float[isize];<a name="line.714"></a>
<span class="sourceLineNo">715</span>                int index = get1DIndex(i, j);<a name="line.715"></a>
<span class="sourceLineNo">716</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.716"></a>
<span class="sourceLineNo">717</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.717"></a>
<span class="sourceLineNo">718</span>                }<a name="line.718"></a>
<span class="sourceLineNo">719</span>                return result;<a name="line.719"></a>
<span class="sourceLineNo">720</span>        }<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>        @Override<a name="line.722"></a>
<span class="sourceLineNo">723</span>        public float[] getFloatArray(final int... pos) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>                float[] result = new float[isize];<a name="line.724"></a>
<span class="sourceLineNo">725</span>                int index = get1DIndex(pos);<a name="line.725"></a>
<span class="sourceLineNo">726</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.726"></a>
<span class="sourceLineNo">727</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.727"></a>
<span class="sourceLineNo">728</span>                }<a name="line.728"></a>
<span class="sourceLineNo">729</span>                return result;<a name="line.729"></a>
<span class="sourceLineNo">730</span>        }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>        @Override<a name="line.732"></a>
<span class="sourceLineNo">733</span>        public double[] getDoubleArray() {<a name="line.733"></a>
<span class="sourceLineNo">734</span>                double[] result = new double[isize];<a name="line.734"></a>
<span class="sourceLineNo">735</span>                int index = getFirst1DIndex();<a name="line.735"></a>
<span class="sourceLineNo">736</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.736"></a>
<span class="sourceLineNo">737</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.737"></a>
<span class="sourceLineNo">738</span>                }<a name="line.738"></a>
<span class="sourceLineNo">739</span>                return result;<a name="line.739"></a>
<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
<span class="sourceLineNo">741</span><a name="line.741"></a>
<span class="sourceLineNo">742</span>        @Override<a name="line.742"></a>
<span class="sourceLineNo">743</span>        public double[] getDoubleArray(final int i) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>                double[] result = new double[isize];<a name="line.744"></a>
<span class="sourceLineNo">745</span>                int index = get1DIndex(i);<a name="line.745"></a>
<span class="sourceLineNo">746</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.746"></a>
<span class="sourceLineNo">747</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.747"></a>
<span class="sourceLineNo">748</span>                }<a name="line.748"></a>
<span class="sourceLineNo">749</span>                return result;<a name="line.749"></a>
<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>        @Override<a name="line.752"></a>
<span class="sourceLineNo">753</span>        public double[] getDoubleArray(final int i, final int j) {<a name="line.753"></a>
<span class="sourceLineNo">754</span>                double[] result = new double[isize];<a name="line.754"></a>
<span class="sourceLineNo">755</span>                int index = get1DIndex(i, j);<a name="line.755"></a>
<span class="sourceLineNo">756</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.757"></a>
<span class="sourceLineNo">758</span>                }<a name="line.758"></a>
<span class="sourceLineNo">759</span>                return result;<a name="line.759"></a>
<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>        @Override<a name="line.762"></a>
<span class="sourceLineNo">763</span>        public double[] getDoubleArray(final int... pos) {<a name="line.763"></a>
<span class="sourceLineNo">764</span>                double[] result = new double[isize];<a name="line.764"></a>
<span class="sourceLineNo">765</span>                int index = get1DIndex(pos);<a name="line.765"></a>
<span class="sourceLineNo">766</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.766"></a>
<span class="sourceLineNo">767</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.767"></a>
<span class="sourceLineNo">768</span>                }<a name="line.768"></a>
<span class="sourceLineNo">769</span>                return result;<a name="line.769"></a>
<span class="sourceLineNo">770</span>        }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>        @Override<a name="line.772"></a>
<span class="sourceLineNo">773</span>        public void getDoubleArrayAbs(final int index, final double[] darray) {<a name="line.773"></a>
<span class="sourceLineNo">774</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.774"></a>
<span class="sourceLineNo">775</span>                        darray[i] = data[index + i];<a name="line.775"></a>
<span class="sourceLineNo">776</span>                }<a name="line.776"></a>
<span class="sourceLineNo">777</span>        }<a name="line.777"></a>
<span class="sourceLineNo">778</span><a name="line.778"></a>
<span class="sourceLineNo">779</span>        @Override<a name="line.779"></a>
<span class="sourceLineNo">780</span>        public String getString() {<a name="line.780"></a>
<span class="sourceLineNo">781</span>                return getStringAbs(getFirst1DIndex());<a name="line.781"></a>
<span class="sourceLineNo">782</span>        }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>        @Override<a name="line.784"></a>
<span class="sourceLineNo">785</span>        public String getString(final int i) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>                return getStringAbs(get1DIndex(i));<a name="line.786"></a>
<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>        @Override<a name="line.789"></a>
<span class="sourceLineNo">790</span>        public String getString(final int i, final int j) {<a name="line.790"></a>
<span class="sourceLineNo">791</span>                return getStringAbs(get1DIndex(i, j));<a name="line.791"></a>
<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>        @Override<a name="line.794"></a>
<span class="sourceLineNo">795</span>        public String getString(final int... pos) {<a name="line.795"></a>
<span class="sourceLineNo">796</span>                return getStringAbs(get1DIndex(pos));<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>        @Override<a name="line.799"></a>
<span class="sourceLineNo">800</span>        protected double getFirstValue() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>                return data[getFirst1DIndex()];<a name="line.801"></a>
<span class="sourceLineNo">802</span>        }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>        @Override<a name="line.804"></a>
<span class="sourceLineNo">805</span>        protected double getFirstValue(int i) {<a name="line.805"></a>
<span class="sourceLineNo">806</span>                return data[get1DIndex(i)];<a name="line.806"></a>
<span class="sourceLineNo">807</span>        }<a name="line.807"></a>
<span class="sourceLineNo">808</span><a name="line.808"></a>
<span class="sourceLineNo">809</span>        @Override<a name="line.809"></a>
<span class="sourceLineNo">810</span>        protected double getFirstValue(int i, int j) {<a name="line.810"></a>
<span class="sourceLineNo">811</span>                return data[get1DIndex(i, j)];<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>        @Override<a name="line.814"></a>
<span class="sourceLineNo">815</span>        protected double getFirstValue(final int... pos) {<a name="line.815"></a>
<span class="sourceLineNo">816</span>                return data[get1DIndex(pos)];<a name="line.816"></a>
<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
<span class="sourceLineNo">818</span><a name="line.818"></a>
<span class="sourceLineNo">819</span>        @Override<a name="line.819"></a>
<span class="sourceLineNo">820</span>        public Object getObjectAbs(final int index) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>                float[] result = new float[isize]; // PRIM_TYPE<a name="line.821"></a>
<span class="sourceLineNo">822</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.822"></a>
<span class="sourceLineNo">823</span>                        result[i] = data[index + i];<a name="line.823"></a>
<span class="sourceLineNo">824</span>                }<a name="line.824"></a>
<span class="sourceLineNo">825</span>                return result;<a name="line.825"></a>
<span class="sourceLineNo">826</span>        }<a name="line.826"></a>
<span class="sourceLineNo">827</span><a name="line.827"></a>
<span class="sourceLineNo">828</span>        @Override<a name="line.828"></a>
<span class="sourceLineNo">829</span>        public String getStringAbs(final int index) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>                StringBuilder s = new StringBuilder();<a name="line.830"></a>
<span class="sourceLineNo">831</span>                s.append('(');<a name="line.831"></a>
<span class="sourceLineNo">832</span>                s.append(stringFormat == null ? String.format("%.8g", data[index]) : // FORMAT_STRING<a name="line.832"></a>
<span class="sourceLineNo">833</span>                        stringFormat.format(data[index]));<a name="line.833"></a>
<span class="sourceLineNo">834</span>                for (int i = 1; i &lt; isize; i++) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>                        s.append(' ');<a name="line.835"></a>
<span class="sourceLineNo">836</span>                        s.append(stringFormat == null ? String.format("%.8g", data[index + i]) : // FORMAT_STRING<a name="line.836"></a>
<span class="sourceLineNo">837</span>                                stringFormat.format(data[index + i]));<a name="line.837"></a>
<span class="sourceLineNo">838</span>                }<a name="line.838"></a>
<span class="sourceLineNo">839</span>                s.append(')');<a name="line.839"></a>
<span class="sourceLineNo">840</span>                return s.toString();<a name="line.840"></a>
<span class="sourceLineNo">841</span>        }<a name="line.841"></a>
<span class="sourceLineNo">842</span><a name="line.842"></a>
<span class="sourceLineNo">843</span>        @Override<a name="line.843"></a>
<span class="sourceLineNo">844</span>        public void setObjectAbs(final int index, final Object obj) {<a name="line.844"></a>
<span class="sourceLineNo">845</span>                float[] oa = DTypeUtils.toFloatArray(obj, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.845"></a>
<span class="sourceLineNo">846</span>                setAbs(index, oa);<a name="line.846"></a>
<span class="sourceLineNo">847</span>        }<a name="line.847"></a>
<span class="sourceLineNo">848</span><a name="line.848"></a>
<span class="sourceLineNo">849</span>        @Override<a name="line.849"></a>
<span class="sourceLineNo">850</span>        public void set(final Object obj) {<a name="line.850"></a>
<span class="sourceLineNo">851</span>                setItem(DTypeUtils.toFloatArray(obj, isize)); // CLASS_TYPE<a name="line.851"></a>
<span class="sourceLineNo">852</span>        }<a name="line.852"></a>
<span class="sourceLineNo">853</span><a name="line.853"></a>
<span class="sourceLineNo">854</span>        @Override<a name="line.854"></a>
<span class="sourceLineNo">855</span>        public void set(final Object obj, final int i) {<a name="line.855"></a>
<span class="sourceLineNo">856</span>                setItem(DTypeUtils.toFloatArray(obj, isize), i); // CLASS_TYPE<a name="line.856"></a>
<span class="sourceLineNo">857</span>        }<a name="line.857"></a>
<span class="sourceLineNo">858</span><a name="line.858"></a>
<span class="sourceLineNo">859</span>        @Override<a name="line.859"></a>
<span class="sourceLineNo">860</span>        public void set(final Object obj, final int i, final int j) {<a name="line.860"></a>
<span class="sourceLineNo">861</span>                setItem(DTypeUtils.toFloatArray(obj, isize), i, j); // CLASS_TYPE<a name="line.861"></a>
<span class="sourceLineNo">862</span>        }<a name="line.862"></a>
<span class="sourceLineNo">863</span><a name="line.863"></a>
<span class="sourceLineNo">864</span>        @Override<a name="line.864"></a>
<span class="sourceLineNo">865</span>        public void set(final Object obj, int... pos) {<a name="line.865"></a>
<span class="sourceLineNo">866</span>                if (pos == null || (pos.length == 0 &amp;&amp; shape.length &gt; 0)) {<a name="line.866"></a>
<span class="sourceLineNo">867</span>                        pos = new int[shape.length];<a name="line.867"></a>
<span class="sourceLineNo">868</span>                }<a name="line.868"></a>
<span class="sourceLineNo">869</span><a name="line.869"></a>
<span class="sourceLineNo">870</span>                setItem(DTypeUtils.toFloatArray(obj, isize), pos); // CLASS_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>        /**<a name="line.873"></a>
<span class="sourceLineNo">874</span>         * Set values at first position. The dataset must not be null<a name="line.874"></a>
<span class="sourceLineNo">875</span>         *<a name="line.875"></a>
<span class="sourceLineNo">876</span>         * @param d<a name="line.876"></a>
<span class="sourceLineNo">877</span>         * @since 2.0<a name="line.877"></a>
<span class="sourceLineNo">878</span>         */<a name="line.878"></a>
<span class="sourceLineNo">879</span>        public void setItem(final float[] d) { // PRIM_TYPE<a name="line.879"></a>
<span class="sourceLineNo">880</span>                if (d.length &gt; isize) {<a name="line.880"></a>
<span class="sourceLineNo">881</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.881"></a>
<span class="sourceLineNo">882</span>                }<a name="line.882"></a>
<span class="sourceLineNo">883</span>                setAbs(getFirst1DIndex(), d);<a name="line.883"></a>
<span class="sourceLineNo">884</span>        }<a name="line.884"></a>
<span class="sourceLineNo">885</span><a name="line.885"></a>
<span class="sourceLineNo">886</span>        /**<a name="line.886"></a>
<span class="sourceLineNo">887</span>         * Set values at given position. The dataset must be 1D<a name="line.887"></a>
<span class="sourceLineNo">888</span>         *<a name="line.888"></a>
<span class="sourceLineNo">889</span>         * @param d<a name="line.889"></a>
<span class="sourceLineNo">890</span>         * @param i<a name="line.890"></a>
<span class="sourceLineNo">891</span>         */<a name="line.891"></a>
<span class="sourceLineNo">892</span>        public void setItem(final float[] d, final int i) { // PRIM_TYPE<a name="line.892"></a>
<span class="sourceLineNo">893</span>                if (d.length &gt; isize) {<a name="line.893"></a>
<span class="sourceLineNo">894</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.894"></a>
<span class="sourceLineNo">895</span>                }<a name="line.895"></a>
<span class="sourceLineNo">896</span>                setAbs(get1DIndex(i), d);<a name="line.896"></a>
<span class="sourceLineNo">897</span>        }<a name="line.897"></a>
<span class="sourceLineNo">898</span><a name="line.898"></a>
<span class="sourceLineNo">899</span>        /**<a name="line.899"></a>
<span class="sourceLineNo">900</span>         * Set values at given position. The dataset must be 1D<a name="line.900"></a>
<span class="sourceLineNo">901</span>         *<a name="line.901"></a>
<span class="sourceLineNo">902</span>         * @param d<a name="line.902"></a>
<span class="sourceLineNo">903</span>         * @param i<a name="line.903"></a>
<span class="sourceLineNo">904</span>         * @param j<a name="line.904"></a>
<span class="sourceLineNo">905</span>         */<a name="line.905"></a>
<span class="sourceLineNo">906</span>        public void setItem(final float[] d, final int i, final int j) { // PRIM_TYPE<a name="line.906"></a>
<span class="sourceLineNo">907</span>                if (d.length &gt; isize) {<a name="line.907"></a>
<span class="sourceLineNo">908</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.908"></a>
<span class="sourceLineNo">909</span>                }<a name="line.909"></a>
<span class="sourceLineNo">910</span>                setAbs(get1DIndex(i, j), d);<a name="line.910"></a>
<span class="sourceLineNo">911</span>        }<a name="line.911"></a>
<span class="sourceLineNo">912</span><a name="line.912"></a>
<span class="sourceLineNo">913</span>        /**<a name="line.913"></a>
<span class="sourceLineNo">914</span>         * Set values at given position<a name="line.914"></a>
<span class="sourceLineNo">915</span>         *<a name="line.915"></a>
<span class="sourceLineNo">916</span>         * @param d<a name="line.916"></a>
<span class="sourceLineNo">917</span>         * @param pos<a name="line.917"></a>
<span class="sourceLineNo">918</span>         */<a name="line.918"></a>
<span class="sourceLineNo">919</span>        public void setItem(final float[] d, final int... pos) { // PRIM_TYPE<a name="line.919"></a>
<span class="sourceLineNo">920</span>                if (d.length &gt; isize) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.921"></a>
<span class="sourceLineNo">922</span>                }<a name="line.922"></a>
<span class="sourceLineNo">923</span>                setAbs(get1DIndex(pos), d);<a name="line.923"></a>
<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
<span class="sourceLineNo">925</span><a name="line.925"></a>
<span class="sourceLineNo">926</span>        private void setDoubleArrayAbs(final int index, final double[] d) {<a name="line.926"></a>
<span class="sourceLineNo">927</span>                for (int i = 0; i &lt; isize; i++)<a name="line.927"></a>
<span class="sourceLineNo">928</span>                        data[index + i] = (float) d[i]; // ADD_CAST<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>        @Override<a name="line.931"></a>
<span class="sourceLineNo">932</span>        public void resize(int... newShape) {<a name="line.932"></a>
<span class="sourceLineNo">933</span>                setDirty();<a name="line.933"></a>
<span class="sourceLineNo">934</span>                IndexIterator iter = getIterator();<a name="line.934"></a>
<span class="sourceLineNo">935</span>                int nsize = ShapeUtils.calcSize(newShape);<a name="line.935"></a>
<span class="sourceLineNo">936</span>                float[] ndata; // PRIM_TYPE<a name="line.936"></a>
<span class="sourceLineNo">937</span>                try {<a name="line.937"></a>
<span class="sourceLineNo">938</span>                        ndata = createArray(nsize);<a name="line.938"></a>
<span class="sourceLineNo">939</span>                } catch (Throwable t) {<a name="line.939"></a>
<span class="sourceLineNo">940</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.940"></a>
<span class="sourceLineNo">941</span>                        throw new IllegalArgumentException(t);<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>                int i = 0;<a name="line.944"></a>
<span class="sourceLineNo">945</span>                while (iter.hasNext() &amp;&amp; i &lt; nsize) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.946"></a>
<span class="sourceLineNo">947</span>                                ndata[i++] = data[iter.index + j];<a name="line.947"></a>
<span class="sourceLineNo">948</span>                        }<a name="line.948"></a>
<span class="sourceLineNo">949</span>                }<a name="line.949"></a>
<span class="sourceLineNo">950</span><a name="line.950"></a>
<span class="sourceLineNo">951</span>                odata = data = ndata;<a name="line.951"></a>
<span class="sourceLineNo">952</span>                size = nsize;<a name="line.952"></a>
<span class="sourceLineNo">953</span>                shape = newShape;<a name="line.953"></a>
<span class="sourceLineNo">954</span>                stride = null;<a name="line.954"></a>
<span class="sourceLineNo">955</span>                offset = 0;<a name="line.955"></a>
<span class="sourceLineNo">956</span>                base = null;<a name="line.956"></a>
<span class="sourceLineNo">957</span>        }<a name="line.957"></a>
<span class="sourceLineNo">958</span><a name="line.958"></a>
<span class="sourceLineNo">959</span>        @Override<a name="line.959"></a>
<span class="sourceLineNo">960</span>        public CompoundFloatDataset getSlice(final SliceIterator siter) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>                CompoundFloatDataset result = new CompoundFloatDataset(isize, siter.getShape());<a name="line.961"></a>
<span class="sourceLineNo">962</span>                float[] rdata = result.data; // PRIM_TYPE<a name="line.962"></a>
<span class="sourceLineNo">963</span>                IndexIterator riter = result.getIterator();<a name="line.963"></a>
<span class="sourceLineNo">964</span><a name="line.964"></a>
<span class="sourceLineNo">965</span>                while (siter.hasNext() &amp;&amp; riter.hasNext()) {<a name="line.965"></a>
<span class="sourceLineNo">966</span>                        for (int i = 0; i &lt; isize; i++)<a name="line.966"></a>
<span class="sourceLineNo">967</span>                                rdata[riter.index + i] = data[siter.index + i];<a name="line.967"></a>
<span class="sourceLineNo">968</span>                }<a name="line.968"></a>
<span class="sourceLineNo">969</span><a name="line.969"></a>
<span class="sourceLineNo">970</span>                result.setName(name + BLOCK_OPEN + Slice.createString(siter.shape, siter.start, siter.stop, siter.step) + BLOCK_CLOSE);<a name="line.970"></a>
<span class="sourceLineNo">971</span>                return result;<a name="line.971"></a>
<span class="sourceLineNo">972</span>        }<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>        @Override<a name="line.974"></a>
<span class="sourceLineNo">975</span>        public FloatDataset getElementsView(int element) { // CLASS_TYPE<a name="line.975"></a>
<span class="sourceLineNo">976</span>                if (element &lt; 0)<a name="line.976"></a>
<span class="sourceLineNo">977</span>                        element += isize;<a name="line.977"></a>
<span class="sourceLineNo">978</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.978"></a>
<span class="sourceLineNo">979</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.979"></a>
<span class="sourceLineNo">980</span>                }<a name="line.980"></a>
<span class="sourceLineNo">981</span><a name="line.981"></a>
<span class="sourceLineNo">982</span>                FloatDataset view = new FloatDataset(shape); // CLASS_TYPE<a name="line.982"></a>
<span class="sourceLineNo">983</span><a name="line.983"></a>
<span class="sourceLineNo">984</span>                copyToView(this, view, true, true);<a name="line.984"></a>
<span class="sourceLineNo">985</span>                view.setData();<a name="line.985"></a>
<span class="sourceLineNo">986</span>                if (view.stride == null) {<a name="line.986"></a>
<span class="sourceLineNo">987</span>                        int[] offset = new int[1];<a name="line.987"></a>
<span class="sourceLineNo">988</span>                        view.stride = createStrides(this, offset);<a name="line.988"></a>
<span class="sourceLineNo">989</span>                        view.offset = offset[0] + element;<a name="line.989"></a>
<span class="sourceLineNo">990</span>                        view.base = base == null ? this : base;<a name="line.990"></a>
<span class="sourceLineNo">991</span>                } else {<a name="line.991"></a>
<span class="sourceLineNo">992</span>                        view.offset += element;<a name="line.992"></a>
<span class="sourceLineNo">993</span>                }<a name="line.993"></a>
<span class="sourceLineNo">994</span><a name="line.994"></a>
<span class="sourceLineNo">995</span>                return view;<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>        @Override<a name="line.998"></a>
<span class="sourceLineNo">999</span>        public FloatDataset getElements(int element) { // CLASS_TYPE<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                final FloatDataset elements = new FloatDataset(shape); // CLASS_TYPE<a name="line.1000"></a>
<span class="sourceLineNo">1001</span><a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                copyElements(elements, element);<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                return elements;<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span><a name="line.1005"></a>
<span class="sourceLineNo">1006</span>        @Override<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>        public void copyElements(Dataset destination, int element) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                if (element &lt; 0)<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                        element += isize;<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                if (getElementClass() != destination.getElementClass()) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                        throw new IllegalArgumentException("Element class of destination does not match this dataset");<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span><a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                final IndexIterator it = getIterator(element);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                final float[] elements = ((FloatDataset) destination).data; // CLASS_TYPE // PRIM_TYPE<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                destination.setDirty();<a name="line.1019"></a>
<span class="sourceLineNo">1020</span><a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                int n = 0;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                while (it.hasNext()) {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        elements[n] = data[it.index];<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                        n++;<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                }<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>        }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span><a name="line.1027"></a>
<span class="sourceLineNo">1028</span>        @Override<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>        public void setElements(Dataset source, int element) {<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                setDirty();<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                if (element &lt; 0)<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                        element += isize;<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                if (getElementClass() != source.getElementClass()) {<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                        throw new IllegalArgumentException("Element class of destination does not match this dataset");<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                }<a name="line.1038"></a>
<span class="sourceLineNo">1039</span><a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                final IndexIterator it = getIterator(element);<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                final float[] elements = ((FloatDataset) source).data; // CLASS_TYPE // PRIM_TYPE<a name="line.1041"></a>
<span class="sourceLineNo">1042</span><a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                int n = 0;<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                while (it.hasNext()) {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                        data[it.index] = elements[n];<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                        n++;<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>                }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
<span class="sourceLineNo">1049</span><a name="line.1049"></a>
<span class="sourceLineNo">1050</span>        @Override<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>        public void fillDataset(Dataset result, IndexIterator iter) {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                IndexIterator riter = result.getIterator();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                result.setDirty();<a name="line.1053"></a>
<span class="sourceLineNo">1054</span><a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                float[] rdata = ((CompoundFloatDataset) result).data; // PRIM_TYPE<a name="line.1055"></a>
<span class="sourceLineNo">1056</span><a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                while (riter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                                rdata[riter.index + i] = data[iter.index + i];<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                        }<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                }<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
<span class="sourceLineNo">1063</span><a name="line.1063"></a>
<span class="sourceLineNo">1064</span>        @Override<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>        public CompoundFloatDataset setByBoolean(final Object o, Dataset selection) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                setDirty();<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                if (o instanceof Dataset) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                        Dataset ds = (Dataset) o;<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                        final int length = ((Number) selection.sum()).intValue();<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>                        if (length != ds.getSize()) {<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>                                throw new IllegalArgumentException(<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>                                                "Number of true items in selection does not match number of items in dataset");<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>                        }<a name="line.1073"></a>
<span class="sourceLineNo">1074</span><a name="line.1074"></a>
<span class="sourceLineNo">1075</span>                        IndexIterator iter = ds.getIterator();<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>                        BooleanIterator biter = getBooleanIterator(selection);<a name="line.1076"></a>
<span class="sourceLineNo">1077</span><a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                                }<a name="line.1081"></a>
<span class="sourceLineNo">1082</span><a name="line.1082"></a>
<span class="sourceLineNo">1083</span>                                while (biter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>                                                data[biter.index + i] = (float) ds.getElementDoubleAbs(iter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>                                        }<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>                                }<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                        } else {<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                                while (biter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                                        data[biter.index] = (float) ds.getElementDoubleAbs(iter.index); // GET_ELEMENT_WITH_CAST<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                                                data[biter.index + i] = 0;<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                                        }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                                }<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                        }<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>                } else {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                        try {<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>                                final float[] vr = DTypeUtils.toFloatArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1098"></a>
<span class="sourceLineNo">1099</span><a name="line.1099"></a>
<span class="sourceLineNo">1100</span>                                final BooleanIterator biter = getBooleanIterator(selection);<a name="line.1100"></a>
<span class="sourceLineNo">1101</span><a name="line.1101"></a>
<span class="sourceLineNo">1102</span>                                while (biter.hasNext()) {<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>                                                data[biter.index + i] = vr[i];<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>                                        }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>                                }<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>                        } catch (IllegalArgumentException e) {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                        }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                }<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                return this;<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>        }<a name="line.1112"></a>
<span class="sourceLineNo">1113</span><a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        @Override<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>        public CompoundFloatDataset setBy1DIndex(final Object o, Dataset index) {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                setDirty();<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                if (o instanceof Dataset) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                        Dataset ds = (Dataset) o;<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                        if (index.getSize() != ds.getSize()) {<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                                throw new IllegalArgumentException(<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                                                "Number of items in selection does not match number of items in dataset");<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                        }<a name="line.1122"></a>
<span class="sourceLineNo">1123</span><a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                        IndexIterator oiter = ds.getIterator();<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                        final IntegerIterator iter = new IntegerIterator(index, size, isize);<a name="line.1125"></a>
<span class="sourceLineNo">1126</span><a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>                                }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span><a name="line.1131"></a>
<span class="sourceLineNo">1132</span>                                double[] temp = new double[isize];<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                                        ((AbstractCompoundDataset) ds).getDoubleArrayAbs(oiter.index, temp);<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                                        setDoubleArrayAbs(iter.index, temp);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                                }<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                                                data[iter.index + i] = (float) ds.getElementDoubleAbs(oiter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                                        }<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                                }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                        } else {<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                                        data[iter.index] = (float) ds.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                                                data[iter.index + i] = 0;<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                                        }<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                                }<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                        }<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>                } else {<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                        try {<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                                final float[] vr = DTypeUtils.toFloatArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1152"></a>
<span class="sourceLineNo">1153</span><a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                                final IntegerIterator iter = new IntegerIterator(index, size, isize);<a name="line.1154"></a>
<span class="sourceLineNo">1155</span><a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                                while (iter.hasNext()) {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                                        setAbs(iter.index, vr);<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                                }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                        } catch (IllegalArgumentException e) {<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                        }<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                }<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                return this;<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>        }<a name="line.1164"></a>
<span class="sourceLineNo">1165</span><a name="line.1165"></a>
<span class="sourceLineNo">1166</span>        @Override<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>        public CompoundFloatDataset setByIndexes(final Object o, final Object... indexes) {<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                setDirty();<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                final IntegersIterator iter = new IntegersIterator(shape, indexes);<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                final int[] pos = iter.getPos();<a name="line.1170"></a>
<span class="sourceLineNo">1171</span><a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                if (o instanceof Dataset) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                        Dataset ds = (Dataset) o;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                        if (ShapeUtils.calcSize(iter.getShape()) != ds.getSize()) {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                                throw new IllegalArgumentException(<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>                                                "Number of items in selection does not match number of items in dataset");<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>                        IndexIterator oiter = ds.getIterator();<a name="line.1179"></a>
<span class="sourceLineNo">1180</span><a name="line.1180"></a>
<span class="sourceLineNo">1181</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>                                }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span><a name="line.1185"></a>
<span class="sourceLineNo">1186</span>                                double[] temp = new double[isize];<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                                        ((AbstractCompoundDataset) ds).getDoubleArray(temp, pos);<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                                        setDoubleArrayAbs(get1DIndex(pos), temp);<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                                }<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                        } else {<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                                        int n = get1DIndex(pos);<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                                        data[n] = (float) ds.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                                                data[n + i] = 0;<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                                        }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                                }<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                        }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>                } else {<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                        try {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>                                final float[] vr = DTypeUtils.toFloatArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>                                while (iter.hasNext()) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                                        setAbs(get1DIndex(pos), vr);<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                                }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>                        } catch (IllegalArgumentException e) {<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                        }<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                return this;<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>        }<a name="line.1212"></a>
<span class="sourceLineNo">1213</span><a name="line.1213"></a>
<span class="sourceLineNo">1214</span>        @Override<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>        CompoundFloatDataset setSlicedView(Dataset view, Dataset d) {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                setDirty();<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(view, d);<a name="line.1217"></a>
<span class="sourceLineNo">1218</span><a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                final int is = view.getElementsPerItem();<a name="line.1219"></a>
<span class="sourceLineNo">1220</span><a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                if (is &gt; 1) {<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                        if (d.getElementsPerItem() == 1) {<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                                while (it.hasNext()) {<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                                        final float bv = (float) it.bDouble; // PRIM_TYPE // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                                        data[it.aIndex] = bv;<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                                        for (int j = 1; j &lt; is; j++) {<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                                                data[it.aIndex + j] = bv;<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                                        }<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                                }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                        } else {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                                while (it.hasNext()) {<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                                        data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                        for (int j = 1; j &lt; is; j++) {<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                                                data[it.aIndex + j] = (float) d.getElementDoubleAbs(it.bIndex + j); // GET_ELEMENT_WITH_CAST<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                                        }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                                }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                        }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                } else {<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                        while (it.hasNext()) {<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                                data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>                        }<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>                }<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>                return this;<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        }<a name="line.1244"></a>
<span class="sourceLineNo">1245</span><a name="line.1245"></a>
<span class="sourceLineNo">1246</span>        @Override<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>        public CompoundFloatDataset setSlice(final Object o, final IndexIterator siter) {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                setDirty();<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                if (o instanceof IDataset) {<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                        final IDataset ds = (IDataset) o;<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                        final int[] oshape = ds.getShape();<a name="line.1251"></a>
<span class="sourceLineNo">1252</span><a name="line.1252"></a>
<span class="sourceLineNo">1253</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), oshape)) {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>                                throw new IllegalArgumentException(String.format(<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(oshape),<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                                                Arrays.toString(siter.getShape())));<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                        }<a name="line.1257"></a>
<span class="sourceLineNo">1258</span><a name="line.1258"></a>
<span class="sourceLineNo">1259</span>                        if (ds instanceof Dataset) {<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>                                final Dataset ads = (Dataset) ds;<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                                IndexIterator oiter = ads.getIterator();<a name="line.1261"></a>
<span class="sourceLineNo">1262</span><a name="line.1262"></a>
<span class="sourceLineNo">1263</span>                                if (ds instanceof AbstractCompoundDataset) {<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                                        if (isize != ads.getElementsPerItem()) {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>                                                throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>                                        }<a name="line.1266"></a>
<span class="sourceLineNo">1267</span><a name="line.1267"></a>
<span class="sourceLineNo">1268</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>                                                        data[siter.index + i] = (float) ads.getElementDoubleAbs(oiter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>                                                }<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>                                        }<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>                                } else {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>                                                data[siter.index] = (float) ads.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>                                                        data[siter.index + i] = 0;<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>                                                }<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>                                        }<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>                                }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>                        } else {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>                                final IndexIterator oiter = new PositionIterator(oshape);<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>                                final int[] pos = oiter.getPos();<a name="line.1283"></a>
<span class="sourceLineNo">1284</span><a name="line.1284"></a>
<span class="sourceLineNo">1285</span>                                if (ds.getElementsPerItem() == 1) {<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                                                data[siter.index] = ds.getFloat(pos); // PRIM_TYPE<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                                                        data[siter.index + i] = 0;<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                                                }<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                                        }<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                                } else {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                                                final float[] val = DTypeUtils.toFloatArray(ds.getObject(pos), isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>                                                        data[siter.index + i] = val[i];<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                                                }<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                                        }<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                                }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>                        }<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                } else {<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>                        try {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>                                final float[] vr = DTypeUtils.toFloatArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1303"></a>
<span class="sourceLineNo">1304</span><a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                                while (siter.hasNext()) {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                                                data[siter.index + i] = vr[i];<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                                        }<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                                }<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>                        } catch (IllegalArgumentException e) {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>                                throw new IllegalArgumentException("Object for setting slice is not a dataset or number");<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                        }<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                }<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                return this;<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>        }<a name="line.1315"></a>
<span class="sourceLineNo">1316</span><a name="line.1316"></a>
<span class="sourceLineNo">1317</span>        @Override<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>        public void copyItemsFromAxes(final int[] pos, final boolean[] axes, final Dataset dest) {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                float[] ddata = (float[]) dest.getBuffer(); // PRIM_TYPE<a name="line.1319"></a>
<span class="sourceLineNo">1320</span><a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                if (dest.getElementsPerItem() != isize) {<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                        throw new IllegalArgumentException(String.format(<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>                                        "Destination dataset is incompatible as it has %d elements per item not %d",<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>                                        dest.getElementsPerItem(), isize));<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>                }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span><a name="line.1326"></a>
<span class="sourceLineNo">1327</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>                int[] sshape = ShapeUtils.squeezeShape(siter.getShape(), false);<a name="line.1328"></a>
<span class="sourceLineNo">1329</span><a name="line.1329"></a>
<span class="sourceLineNo">1330</span>                IndexIterator diter = dest.getSliceIterator(null, sshape, null);<a name="line.1330"></a>
<span class="sourceLineNo">1331</span><a name="line.1331"></a>
<span class="sourceLineNo">1332</span>                if (ddata.length &lt; ShapeUtils.calcSize(sshape)) {<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>                        throw new IllegalArgumentException("destination array is not large enough");<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>                }<a name="line.1334"></a>
<span class="sourceLineNo">1335</span><a name="line.1335"></a>
<span class="sourceLineNo">1336</span>                dest.setDirty();<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>                while (siter.hasNext() &amp;&amp; diter.hasNext()) {<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>                                ddata[diter.index + i] = data[siter.index + i];<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>                        }<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>                }<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>        }<a name="line.1342"></a>
<span class="sourceLineNo">1343</span><a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        @Override<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        public void setItemsOnAxes(final int[] pos, final boolean[] axes, final Object src) {<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>                setDirty();<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>                float[] sdata = (float[]) src; // PRIM_TYPE<a name="line.1347"></a>
<span class="sourceLineNo">1348</span><a name="line.1348"></a>
<span class="sourceLineNo">1349</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.1349"></a>
<span class="sourceLineNo">1350</span><a name="line.1350"></a>
<span class="sourceLineNo">1351</span>                if (sdata.length &lt; ShapeUtils.calcSize(siter.getShape())) {<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>                        throw new IllegalArgumentException("source array is not large enough");<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>                }<a name="line.1353"></a>
<span class="sourceLineNo">1354</span><a name="line.1354"></a>
<span class="sourceLineNo">1355</span>                for (int i = 0; siter.hasNext(); i++) {<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>                                data[siter.index + j] = sdata[isize * i + j];<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>                        }<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>                }<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>        }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span><a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        @Override<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>        public boolean containsNans() {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>                final IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>                        for (int i = 0; i &lt; isize; i++) { // REAL_ONLY<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>                                if (Float.isNaN(data[iter.index + i])) // CLASS_TYPE // REAL_ONLY<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>                                        return true; // REAL_ONLY<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>                        } // REAL_ONLY<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>                } // REAL_ONLY<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>                return false;<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        }<a name="line.1372"></a>
<span class="sourceLineNo">1373</span><a name="line.1373"></a>
<span class="sourceLineNo">1374</span>        @Override<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>        public boolean containsInfs() {<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>                final IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>                        for (int i = 0; i &lt; isize; i++) { // REAL_ONLY<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>                                if (Float.isInfinite(data[iter.index + i])) // CLASS_TYPE // REAL_ONLY<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>                                        return true; // REAL_ONLY<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>                        } // REAL_ONLY<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>                } // REAL_ONLY<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                return false;<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>        }<a name="line.1384"></a>
<span class="sourceLineNo">1385</span><a name="line.1385"></a>
<span class="sourceLineNo">1386</span>        @Override<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>        public boolean containsInvalidNumbers() {<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>                        for (int i = 0; i &lt; isize; i++) { // REAL_ONLY<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>                                float x = data[iter.index + i]; // PRIM_TYPE // REAL_ONLY<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>                                if (Float.isNaN(x) || Float.isInfinite(x)) // CLASS_TYPE // REAL_ONLY<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>                                        return true; // REAL_ONLY<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>                        } // REAL_ONLY<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>                } // REAL_ONLY<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>                return false;<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>        @Override<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>        public CompoundFloatDataset iadd(final Object b) {<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>                setDirty();<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>                int is = bds.getElementsPerItem();<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>                if (bds.getSize() == 1) {<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>                        final IndexIterator it = getIterator();<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                        final int bOffset = bds.getOffset();<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                        if (is == 1) {<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>                                if (useLong) {<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                                        while (it.hasNext()) {<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>                                                        data[it.index + i] += lb;<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                                                }<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>                                        }<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>                                } else {<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>                                        while (it.hasNext()) {<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>                                                        data[it.index + i] += db;<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>                                                }<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>                                        }<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>                                }<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>                        } else if (is == isize) {<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>                                if (useLong) {<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>                                        while (it.hasNext()) {<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>                                                        data[it.index + i] += bds.getElementLongAbs(i);<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>                                                }<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>                                        }<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>                                } else {<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>                                        while (it.hasNext()) {<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>                                                        data[it.index + i] += bds.getElementDoubleAbs(i);<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>                                                }<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>                                        }<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>                                }<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>                        } else {<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>                        }<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>                } else {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>                        it.setOutputDouble(!useLong);<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>                        if (is == 1) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>                                if (useLong) {<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>                                        while (it.hasNext()) {<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>                                                final long lb = it.bLong;<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>                                                data[it.aIndex] += lb;<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>                                                        data[it.aIndex + i] += lb;<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>                                } else {<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>                                        while (it.hasNext()) {<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>                                                final double db = it.bDouble;<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>                                                data[it.aIndex] += db;<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>                                                        data[it.aIndex + i] += db;<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>                                                }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>                                        }<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>                                }<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>                        } else if (is == isize) {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>                                if (useLong) {<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>                                        while (it.hasNext()) {<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>                                                data[it.aIndex] += it.bLong;<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>                                                        data[it.aIndex + i] += bds.getElementLongAbs(it.bIndex + i);<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>                                                }<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>                                        }<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>                                } else {<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>                                        while (it.hasNext()) {<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>                                                data[it.aIndex] += it.bDouble;<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>                                                        data[it.aIndex + i] += bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>                                                }<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>                                        }<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>                                }<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                        } else {<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>                        }<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>                }<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>                return this;<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
<span class="sourceLineNo">1484</span><a name="line.1484"></a>
<span class="sourceLineNo">1485</span>        @Override<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>        public CompoundFloatDataset isubtract(final Object b) {<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>                setDirty();<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>                int is = bds.getElementsPerItem();<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>                if (bds.getSize() == 1) {<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>                        final IndexIterator it = getIterator();<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>                        final int bOffset = bds.getOffset();<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>                        if (is == 1) {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>                                if (useLong) {<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>                                        while (it.hasNext()) {<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>                                                        data[it.index + i] -= lb;<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>                                } else {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>                                        while (it.hasNext()) {<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>                                                        data[it.index + i] -= db;<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>                                                }<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>                                        }<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>                                }<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>                        } else if (is == isize) {<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>                                if (useLong) {<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>                                        while (it.hasNext()) {<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>                                                        data[it.index + i] -= bds.getElementLongAbs(i);<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>                                                }<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>                                        }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>                                } else {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                                        while (it.hasNext()) {<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>                                                        data[it.index + i] -= bds.getElementDoubleAbs(i);<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>                                                }<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>                                        }<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                                }<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>                        } else {<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>                        }<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>                } else {<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>                        it.setOutputDouble(!useLong);<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>                        if (is == 1) {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>                                if (useLong) {<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>                                        while (it.hasNext()) {<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>                                                final long lb = it.bLong;<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>                                                data[it.aIndex] += lb;<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>                                                        data[it.aIndex + i] -= lb;<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>                                                }<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>                                        }<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>                                } else {<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>                                        while (it.hasNext()) {<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>                                                final double db = it.bDouble;<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>                                                data[it.aIndex] += db;<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>                                                        data[it.aIndex + i] -= db;<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>                                                }<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>                                        }<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>                                }<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>                        } else if (is == isize) {<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>                                if (useLong) {<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>                                        while (it.hasNext()) {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>                                                data[it.aIndex] += it.bLong;<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>                                                        data[it.aIndex + i] -= bds.getElementLongAbs(it.bIndex + i);<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                                                }<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>                                        }<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>                                } else {<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>                                        while (it.hasNext()) {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>                                                data[it.aIndex] += it.bDouble;<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>                                                        data[it.aIndex + i] -= bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>                                                }<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>                                        }<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>                                }<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>                        } else {<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>                        }<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>                }<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>                return this;<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>        }<a name="line.1569"></a>
<span class="sourceLineNo">1570</span><a name="line.1570"></a>
<span class="sourceLineNo">1571</span>        @Override<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>        public CompoundFloatDataset imultiply(final Object b) {<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>                setDirty();<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>                int is = bds.getElementsPerItem();<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>                if (bds.getSize() == 1) {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>                        final IndexIterator it = getIterator();<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>                        final int bOffset = bds.getOffset();<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>                        if (useLong) {<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>                                if (is == 1) {<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>                                        while (it.hasNext()) {<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>                                                        data[it.index + i] *= lb;<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>                                                }<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>                                        }<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>                                } else if (is == isize) {<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>                                        while (it.hasNext()) {<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>                                                        data[it.index + i] *= bds.getElementLongAbs(i);<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>                                } else {<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>                                }<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>                        } else {<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>                                if (is == 1) {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>                                        while (it.hasNext()) {<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>                                                        data[it.index + i] *= db;<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>                                                }<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>                                        }<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>                                } else if (is == isize) {<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>                                        while (it.hasNext()) {<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>                                                        data[it.index + i] *= bds.getElementDoubleAbs(i);<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>                                                }<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>                                        }<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>                                } else {<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<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>                } else {<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>                        it.setOutputDouble(!useLong);<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>                        if (useLong) {<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                                if (is == 1) {<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>                                        while (it.hasNext()) {<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>                                                final double lb = it.bLong;<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>                                                        data[it.aIndex + i] *= lb;<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>                                                }<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>                                        }<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                                } else if (is == isize) {<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                                        while (it.hasNext()) {<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                                                data[it.aIndex] *= it.bLong;<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                                                        data[it.aIndex + i] *= bds.getElementLongAbs(it.bIndex + i);<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>                                                }<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>                                        }<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>                                } else {<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>                                }<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>                        } else {<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>                                if (is == 1) {<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>                                        while (it.hasNext()) {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                                                final double db = it.bDouble;<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>                                                        data[it.aIndex + i] *= db;<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                                                }<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>                                        }<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                                } else if (is == isize) {<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                                        while (it.hasNext()) {<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                                                data[it.aIndex] *= it.bDouble;<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                                                        data[it.aIndex + i] *= bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                                                }<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>                                        }<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>                                } else {<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>                                }<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                        }<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>                }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>                return this;<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>        }<a name="line.1657"></a>
<span class="sourceLineNo">1658</span><a name="line.1658"></a>
<span class="sourceLineNo">1659</span>        @Override<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>        public CompoundFloatDataset idivide(final Object b) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>                setDirty();<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>                int is = bds.getElementsPerItem();<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>                if (bds.getSize() == 1) {<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>                        final IndexIterator it = getIterator();<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>                        final int bOffset = bds.getOffset();<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>                        if (useLong) {<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>                                if (is == 1) {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>                                        // if (lb == 0) { // INT_USE<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>                                        //      fill(0); // INT_USE<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>                                        // } else { // INT_USE<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>                                        while (it.hasNext()) {<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>                                                        data[it.index + i] /= lb;<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>                                        // } // INT_USE<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>                                } else if (is == isize) {<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>                                        while (it.hasNext()) {<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>                                                        final long lb = bds.getElementLongAbs(i);<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>                                                        data[it.index + i] /= lb; // INT_EXCEPTION<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>                                                }<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>                                        }<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>                                } else {<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>                                }<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>                        } else {<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>                                if (is == 1) {<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>                                        // if (db == 0) { // INT_USE<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>                                        //      fill(0); // INT_USE<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>                                        // } else { // INT_USE<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>                                        while (it.hasNext()) {<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>                                                        data[it.index + i] /= db;<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>                                                }<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>                                        }<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>                                        // } // INT_USE<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>                                } else if (is == isize) {<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>                                        while (it.hasNext()) {<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>                                                        final double db = bds.getElementDoubleAbs(i);<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>                                                        data[it.index + i] /= db; // INT_EXCEPTION<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>                                                }<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>                                        }<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>                                } else {<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>                                }<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>                        }<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>                } else {<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>                        it.setOutputDouble(!useLong);<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>                        if (useLong) {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>                                if (is == 1) {<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>                                        while (it.hasNext()) {<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>                                                final long lb = it.bLong;<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>                                                // if (lb == 0) { // INT_USE<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>                                                //      for (int i = 0; i &lt; isize; i++) { // INT_USE<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>                                                //              data[it.aIndex + i] = 0; // INT_USE<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>                                                //      }// INT_USE<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>                                                // } else { // INT_USE<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>                                                        data[it.aIndex + i] /= lb;<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>                                                }<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>                                                // } // INT_USE<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>                                        }<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>                                } else if (is == isize) {<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>                                        while (it.hasNext()) {<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>                                                        final long lb = bds.getElementLongAbs(it.bIndex + i);<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>                                                        data[it.aIndex + i] /= lb; // INT_EXCEPTION<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>                                                }<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>                                        }<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>                                } else {<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>                                }<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>                        } else {<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>                                if (is == 1) {<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>                                        while (it.hasNext()) {<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>                                                final double db = it.bDouble;<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>                                                // if (db == 0) { // INT_USE<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>                                                //      for (int i = 0; i &lt; isize; i++) { // INT_USE<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>                                                //              data[it.aIndex + i] = 0; // INT_USE<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>                                                //      }// INT_USE<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>                                                // } else { // INT_USE<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>                                                        data[it.aIndex + i] /= db;<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>                                                }<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>                                                // } // INT_USE<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>                                        }<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>                                } else if (is == isize) {<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>                                        while (it.hasNext()) {<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>                                                        final double db = bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>                                                        data[it.aIndex + i] /= db; // INT_EXCEPTION<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>                                                }<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>                                        }<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>                                } else {<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<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>                }<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>                return this;<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>        }<a name="line.1767"></a>
<span class="sourceLineNo">1768</span><a name="line.1768"></a>
<span class="sourceLineNo">1769</span>        @Override<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>        public CompoundFloatDataset ifloor() {<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>                setDirty(); // REAL_ONLY<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>                final IndexIterator it = getIterator(); // REAL_ONLY<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>                while (it.hasNext()) { // REAL_ONLY<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>                        for (int i = 0; i &lt; isize; i++) { // REAL_ONLY<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>                                data[it.index + i] = (float) Math.floor(data[it.index] + i); // REAL_ONLY // ADD_CAST<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>                        } // REAL_ONLY<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>                } // REAL_ONLY<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>                return this;<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>        }<a name="line.1779"></a>
<span class="sourceLineNo">1780</span><a name="line.1780"></a>
<span class="sourceLineNo">1781</span>        @Override<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>        public CompoundFloatDataset iremainder(final Object b) {<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                setDirty();<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>                int is = bds.getElementsPerItem();<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>                if (bds.getSize() == 1) {<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>                        final IndexIterator it = getIterator();<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>                        final int bOffset = bds.getOffset();<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>                        if (useLong) {<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>                                if (is == 1) {<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>                                        // if (lb == 0) { // INT_USE<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>                                        //      fill(0); // INT_USE<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>                                        // } else { // INT_USE<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>                                        while (it.hasNext()) {<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>                                                        data[it.index + i] %= lb;<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>                                                }<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>                                        }<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>                                        // } // INT_USE<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>                                } else if (is == isize) {<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>                                        while (it.hasNext()) {<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>                                                        data[it.index + i] %= bds.getElementLongAbs(i); // INT_EXCEPTION<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>                                } else {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>                                }<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>                        } else {<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>                                if (is == 1) {<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>                                        // if (db == 0) { // INT_USE<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>                                        //      fill(0); // INT_USE<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>                                        // } else { // INT_USE<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                                        while (it.hasNext()) {<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>                                                        data[it.index + i] %= db;<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>                                                }<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                                        }<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>                                        // } // INT_USE<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>                                } else if (is == isize) {<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>                                        while (it.hasNext()) {<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                                                        data[it.index + i] %= bds.getElementDoubleAbs(i); // INT_EXCEPTION<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>                                                }<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>                                        }<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>                                } else {<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>                                }<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>                        }<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>                } else {<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>                        it.setOutputDouble(!useLong);<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>                        if (useLong) {<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>                                if (is == 1) {<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>                                        while (it.hasNext()) {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>                                                final long lb = it.bLong;<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>                                                // if (lb == 0) { // INT_USE<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>                                                //      for (int i = 0; i &lt; isize; i++) // INT_USE<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>                                                //              data[it.aIndex + i] = 0; // INT_USE<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>                                                // } else { // INT_USE<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>                                                for (int i = 0; i &lt; isize; i++)<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>                                                        data[it.aIndex + i] %= lb;<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>                                                // } // INT_USE<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>                                        }<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>                                } else if (is == isize) {<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>                                        while (it.hasNext()) {<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>                                                        final long lb = bds.getElementLongAbs(it.bIndex + i);<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>                                                        data[it.aIndex + i] %= lb; // INT_EXCEPTION<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>                                                }<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>                                        }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>                                } else {<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>                                }<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>                        } else {<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>                                if (is == 1) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>                                        while (it.hasNext()) {<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>                                                final double db = it.bDouble;<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>                                                // if (db == 0) { // INT_USE<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>                                                //      for (int i = 0; i &lt; isize; i++) // INT_USE<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>                                                //              data[it.aIndex + i] = 0; // INT_USE<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>                                                // } else { // INT_USE<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>                                                        data[it.aIndex + i] %= db;<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>                                                }<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                                                // } // INT_USE<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>                                        }<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>                                } else if (is == isize) {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                                        while (it.hasNext()) {<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                                                        final double db = bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                                                        data[it.aIndex + i] %= db; // INT_EXCEPTION<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                                                }<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                                        }<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>                                } else {<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                                }<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>                        }<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>                }<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>                return this;<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>        }<a name="line.1884"></a>
<span class="sourceLineNo">1885</span><a name="line.1885"></a>
<span class="sourceLineNo">1886</span>        @Override<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>        public CompoundFloatDataset ipower(final Object b) {<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>                setDirty();<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1889"></a>
<span class="sourceLineNo">1890</span>                final int is = bds.getElementsPerItem();<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>                if (bds.getSize() == 1) {<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>                        final int bOffset = bds.getOffset();<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>                        final double vr = bds.getElementDoubleAbs(bOffset);<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>                        final IndexIterator it = getIterator();<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>                        if (bds.isComplex()) {<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>                                final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>                                if (vi == 0) {<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>                                        while (it.hasNext()) {<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>                                                        final double v = Math.pow(data[it.index + i], vr);<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>                                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>                                                        //      data[it.index + i] = 0; // INT_USE<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>                                                        // } else { // INT_USE<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>                                                        data[it.index + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>                                                        // } // INT_USE<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>                                                }<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                                        }<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>                                } else {<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>                                        final Complex zv = new Complex(vr, vi);<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>                                        while (it.hasNext()) {<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>                                                        Complex zd = new Complex(data[it.index + i], 0);<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>                                                        final double v = zd.pow(zv).getReal();<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>                                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>                                                        //      data[it.index + i] = 0; // INT_USE<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>                                                        // } else { // INT_USE<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>                                                        data[it.index + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>                                                        // } // INT_USE<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>                                                }<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>                                        }<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>                                }<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>                        } else if (is == 1) {<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>                                while (it.hasNext()) {<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>                                                final double v = Math.pow(data[it.index + i], vr);<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>                                                //      data[it.index + i] = 0; // INT_USE<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>                                                // } else { // INT_USE<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>                                                data[it.index + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>                                                // } // INT_USE<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>                                        }<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>                                }<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>                        } else if (is == isize) {<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>                                while (it.hasNext()) {<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>                                                final double v = Math.pow(data[it.index + i], bds.getElementDoubleAbs(i));<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>                                                //      data[it.index + i] = 0; // INT_USE<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>                                                // } else { // INT_USE<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>                                                data[it.index + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>                                                // } // INT_USE<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>                                        }<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>                                }<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>                        }<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>                } else {<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>                        it.setOutputDouble(true);<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>                        if (bds.isComplex()) {<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>                                while (it.hasNext()) {<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>                                        final Complex zv = new Complex(it.bDouble, bds.getElementDoubleAbs(it.bIndex + 1));<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>                                        double v = new Complex(it.aDouble, 0).pow(zv).getReal();<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>                                        // } else { // INT_USE<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>                                        data[it.aIndex] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>                                        // } // INT_USE<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>                                                v = new Complex(data[it.aIndex + i], 0).pow(zv).getReal();<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>                                                //      data[it.aIndex + i] = 0; // INT_USE<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>                                                // } else { // INT_USE<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>                                                data[it.aIndex + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>                                                // } // INT_USE<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>                                        }<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>                                }<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>                        } else {<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>                                while (it.hasNext()) {<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>                                        double v = Math.pow(it.aDouble, it.bDouble);<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>                                        // } else { // INT_USE<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>                                        data[it.aIndex] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>                                        // } // INT_USE<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>                                                v = Math.pow(data[it.aIndex + i], bds.getElementDoubleAbs(it.bIndex + i));<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>                                                //      data[it.aIndex + i] = 0; // INT_USE<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>                                                // } else { // INT_USE<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>                                                data[it.aIndex + i] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>                                                // } // INT_USE<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>                                        }<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>                                }<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>                        }<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>                }<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>                return this;<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>        }<a name="line.1986"></a>
<span class="sourceLineNo">1987</span><a name="line.1987"></a>
<span class="sourceLineNo">1988</span>        @Override<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>        public double residual(final Object b, final Dataset w, boolean ignoreNaNs) {<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>                final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>                it.setOutputDouble(true);<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>                double sum = 0;<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>                double comp = 0;<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>                final int bis = bds.getElementsPerItem();<a name="line.1995"></a>
<span class="sourceLineNo">1996</span><a name="line.1996"></a>
<span class="sourceLineNo">1997</span>                if (bis == 1) {<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>                        if (w == null) {<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>                                while (it.hasNext()) {<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>                                        final double db = it.bDouble;<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>                                        double diff = it.aDouble - db;<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>                                        if (ignoreNaNs) { // REAL_ONLY<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>                                                if (Double.isNaN(diff)) // REAL_ONLY<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>                                                        continue; // REAL_ONLY<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>                                                boolean skip = false; // REAL_ONLY<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>                                                for (int i = 1; i &lt; isize; i++) { // REAL_ONLY<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>                                                        if (Double.isNaN(data[it.aIndex + i])) { // REAL_ONLY<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>                                                                skip = true; // REAL_ONLY<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>                                                                break; // REAL_ONLY<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>                                                        } // REAL_ONLY<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>                                                } // REAL_ONLY<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>                                                if (skip) { // REAL_ONLY<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>                                                        continue; // REAL_ONLY<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>                                                } // REAL_ONLY<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>                                        } // REAL_ONLY<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>                                        double err = diff * diff - comp;<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>                                        double temp = sum + err;<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>                                        comp = (temp - sum) - err;<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>                                        sum = temp;<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>                                                diff = data[it.aIndex + i] - db;<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>                                                err = diff * diff - comp;<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>                                                temp = sum + err;<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>                                                comp = (temp - sum) - err;<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>                                                sum = temp;<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>                                        }<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>                                }<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>                        } else {<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>                                IndexIterator itw = w.getIterator();<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>                                        final double db = it.bDouble;<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>                                        double diff = it.aDouble - db;<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>                                        if (ignoreNaNs) { // REAL_ONLY<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>                                                if (Double.isNaN(diff)) // REAL_ONLY<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>                                                        continue; // REAL_ONLY<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>                                                boolean skip = false; // REAL_ONLY<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>                                                for (int i = 1; i &lt; isize; i++) { // REAL_ONLY<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>                                                        if (Double.isNaN(data[it.aIndex + i])) { // REAL_ONLY<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>                                                                skip = true; // REAL_ONLY<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>                                                                break; // REAL_ONLY<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>                                                        } // REAL_ONLY<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>                                                } // REAL_ONLY<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>                                                if (skip) { // REAL_ONLY<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>                                                        continue; // REAL_ONLY<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>                                                } // REAL_ONLY<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>                                        } // REAL_ONLY<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>                                        double err = diff * diff * dw - comp;<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>                                        double temp = sum + err;<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>                                        comp = (temp - sum) - err;<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>                                        sum = temp;<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>                                                diff = data[it.aIndex + i] - db;<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>                                                err = diff * diff * dw - comp;<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>                                                temp = sum + err;<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>                                                comp = (temp - sum) - err;<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>                                                sum = temp;<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>                } else {<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>                        if (w == null) {<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>                                while (it.hasNext()) {<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>                                        double diff = it.aDouble - it.bDouble;<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>                                        if (ignoreNaNs) { // REAL_ONLY<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>                                                if (Double.isNaN(diff)) // REAL_ONLY<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>                                                        continue; // REAL_ONLY<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>                                                boolean skip = false; // REAL_ONLY<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>                                                for (int i = 1; i &lt; isize; i++) { // REAL_ONLY<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>                                                        if (Double.isNaN(data[it.aIndex + i]) || Double.isNaN(bds.getElementDoubleAbs(it.bIndex + i))) { // REAL_ONLY<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>                                                                skip = true; // REAL_ONLY<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>                                                                break; // REAL_ONLY<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>                                                        } // REAL_ONLY<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>                                                } // REAL_ONLY<a name="line.2074"></a>
<span class="sourceLineNo">2075</span>                                                if (skip) { // REAL_ONLY<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>                                                        continue; // REAL_ONLY<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>                                                } // REAL_ONLY<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>                                        } // REAL_ONLY<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>                                        double err = diff * diff - comp;<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>                                        double temp = sum + err;<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>                                        comp = (temp - sum) - err;<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>                                        sum = temp;<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>                                                diff = data[it.aIndex + i] - bds.getElementDoubleAbs(it.bIndex + i);<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>                                                err = diff * diff - comp;<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>                                                temp = sum + err;<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>                                                comp = (temp - sum) - err;<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>                                                sum = temp;<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>                                        }<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>                                }<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>                        } else {<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>                                IndexIterator itw = w.getIterator();<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>                                        double diff = it.aDouble - it.bDouble;<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>                                        if (ignoreNaNs) { // REAL_ONLY<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>                                                if (Double.isNaN(diff)) // REAL_ONLY<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>                                                        continue; // REAL_ONLY<a name="line.2097"></a>
<span class="sourceLineNo">2098</span>                                                boolean skip = false; // REAL_ONLY<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>                                                for (int i = 1; i &lt; isize; i++) { // REAL_ONLY<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>                                                        if (Double.isNaN(data[it.aIndex + i]) || Double.isNaN(bds.getElementDoubleAbs(it.bIndex + i))) { // REAL_ONLY<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>                                                                skip = true; // REAL_ONLY<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>                                                                break; // REAL_ONLY<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>                                                        } // REAL_ONLY<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>                                                } // REAL_ONLY<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>                                                if (skip) { // REAL_ONLY<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>                                                        continue; // REAL_ONLY<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>                                                } // REAL_ONLY<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>                                        } // REAL_ONLY<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>                                        double err = diff * diff * dw - comp;<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>                                        double temp = sum + err;<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>                                        comp = (temp - sum) - err;<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>                                        sum = temp;<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>                                                diff = data[it.aIndex + i] - bds.getElementDoubleAbs(it.bIndex + i);<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>                                                err = diff * diff * dw - comp;<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>                                                temp = sum + err;<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>                                                comp = (temp - sum) - err;<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>                                                sum = temp;<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>                                        }<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>                                }<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>                return sum;<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>        }<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>}<a name="line.2126"></a>




























































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