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




























































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