<!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 DoubleDataset.java by fromdouble.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.ArrayList;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.util.Arrays;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.List;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.util.Set;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.TreeSet;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.commons.math3.complex.Complex;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.eclipse.january.metadata.StatisticsMetadata;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
<span class="sourceLineNo">028</span> * Extend dataset for float values // PRIM_TYPE<a name="line.28"></a>
<span class="sourceLineNo">029</span> */<a name="line.29"></a>
<span class="sourceLineNo">030</span>public class FloatDataset extends AbstractDataset {<a name="line.30"></a>
<span class="sourceLineNo">031</span>        // pin UID to base class<a name="line.31"></a>
<span class="sourceLineNo">032</span>        private static final long serialVersionUID = Dataset.serialVersionUID;<a name="line.32"></a>
<span class="sourceLineNo">033</span><a name="line.33"></a>
<span class="sourceLineNo">034</span>        protected float[] data; // subclass alias // PRIM_TYPE<a name="line.34"></a>
<span class="sourceLineNo">035</span><a name="line.35"></a>
<span class="sourceLineNo">036</span>        @Override<a name="line.36"></a>
<span class="sourceLineNo">037</span>        protected void setData() {<a name="line.37"></a>
<span class="sourceLineNo">038</span>                data = (float[]) odata; // PRIM_TYPE<a name="line.38"></a>
<span class="sourceLineNo">039</span>        }<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>        protected static float[] createArray(final int size) { // PRIM_TYPE<a name="line.41"></a>
<span class="sourceLineNo">042</span>                float[] array = null; // PRIM_TYPE<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>                try {<a name="line.44"></a>
<span class="sourceLineNo">045</span>                        array = new float[size]; // PRIM_TYPE<a name="line.45"></a>
<span class="sourceLineNo">046</span>                } catch (OutOfMemoryError e) {<a name="line.46"></a>
<span class="sourceLineNo">047</span>                        logger.error("The size of the dataset ({}) that is being created is too large "<a name="line.47"></a>
<span class="sourceLineNo">048</span>                                        + "and there is not enough memory to hold it.", size);<a name="line.48"></a>
<span class="sourceLineNo">049</span>                        throw new OutOfMemoryError("The dimensions given are too large, and there is "<a name="line.49"></a>
<span class="sourceLineNo">050</span>                                        + "not enough memory available in the Java Virtual Machine");<a name="line.50"></a>
<span class="sourceLineNo">051</span>                }<a name="line.51"></a>
<span class="sourceLineNo">052</span>                return array;<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>        @Override<a name="line.55"></a>
<span class="sourceLineNo">056</span>        public int getDType() {<a name="line.56"></a>
<span class="sourceLineNo">057</span>                return FLOAT32; // DATA_TYPE<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>         */<a name="line.62"></a>
<span class="sourceLineNo">063</span>        FloatDataset() {<a name="line.63"></a>
<span class="sourceLineNo">064</span>        }<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>        /**<a name="line.66"></a>
<span class="sourceLineNo">067</span>         * Create a zero-filled dataset of given shape<a name="line.67"></a>
<span class="sourceLineNo">068</span>         * @param shape<a name="line.68"></a>
<span class="sourceLineNo">069</span>         */<a name="line.69"></a>
<span class="sourceLineNo">070</span>        FloatDataset(final int... shape) {<a name="line.70"></a>
<span class="sourceLineNo">071</span>                if (shape != null) {<a name="line.71"></a>
<span class="sourceLineNo">072</span>                        size = ShapeUtils.calcSize(shape);<a name="line.72"></a>
<span class="sourceLineNo">073</span>                        this.shape = shape.clone();<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>                        try {<a name="line.75"></a>
<span class="sourceLineNo">076</span>                                odata = data = createArray(size);<a name="line.76"></a>
<span class="sourceLineNo">077</span>                        } catch (Throwable t) {<a name="line.77"></a>
<span class="sourceLineNo">078</span>                                logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.78"></a>
<span class="sourceLineNo">079</span>                                throw new IllegalArgumentException(t);<a name="line.79"></a>
<span class="sourceLineNo">080</span>                        }<a name="line.80"></a>
<span class="sourceLineNo">081</span>                }<a name="line.81"></a>
<span class="sourceLineNo">082</span>        }<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span>        /**<a name="line.84"></a>
<span class="sourceLineNo">085</span>         * Create a dataset using given data<a name="line.85"></a>
<span class="sourceLineNo">086</span>         * @param data<a name="line.86"></a>
<span class="sourceLineNo">087</span>         * @param shape<a name="line.87"></a>
<span class="sourceLineNo">088</span>         *            (can be null to create 1D dataset)<a name="line.88"></a>
<span class="sourceLineNo">089</span>         */<a name="line.89"></a>
<span class="sourceLineNo">090</span>        FloatDataset(final float[] data, int... shape) { // PRIM_TYPE<a name="line.90"></a>
<span class="sourceLineNo">091</span>                if (data == null) {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                        throw new IllegalArgumentException("Data must not be null");<a name="line.92"></a>
<span class="sourceLineNo">093</span>                }<a name="line.93"></a>
<span class="sourceLineNo">094</span>                if (shape == null || shape.length == 0) {<a name="line.94"></a>
<span class="sourceLineNo">095</span>                        shape = new int[] { data.length };<a name="line.95"></a>
<span class="sourceLineNo">096</span>                }<a name="line.96"></a>
<span class="sourceLineNo">097</span>                size = ShapeUtils.calcSize(shape);<a name="line.97"></a>
<span class="sourceLineNo">098</span>                if (size != data.length) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                        throw new IllegalArgumentException(String.format("Shape %s is not compatible with size of data array, %d",<a name="line.99"></a>
<span class="sourceLineNo">100</span>                                        Arrays.toString(shape), data.length));<a name="line.100"></a>
<span class="sourceLineNo">101</span>                }<a name="line.101"></a>
<span class="sourceLineNo">102</span>                this.shape = size == 0 ? null : shape.clone();<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>                odata = this.data = data;<a name="line.104"></a>
<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>        /**<a name="line.107"></a>
<span class="sourceLineNo">108</span>         * Copy a dataset<a name="line.108"></a>
<span class="sourceLineNo">109</span>         * @param dataset<a name="line.109"></a>
<span class="sourceLineNo">110</span>         */<a name="line.110"></a>
<span class="sourceLineNo">111</span>        FloatDataset(final FloatDataset dataset) {<a name="line.111"></a>
<span class="sourceLineNo">112</span>                copyToView(dataset, this, true, true);<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>                try {<a name="line.114"></a>
<span class="sourceLineNo">115</span>                        if (dataset.stride == null) {<a name="line.115"></a>
<span class="sourceLineNo">116</span>                                if (dataset.data != null) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>                                        odata = data = dataset.data.clone();<a name="line.117"></a>
<span class="sourceLineNo">118</span>                                }<a name="line.118"></a>
<span class="sourceLineNo">119</span>                        } else {<a name="line.119"></a>
<span class="sourceLineNo">120</span>                                offset = 0;<a name="line.120"></a>
<span class="sourceLineNo">121</span>                                stride = null;<a name="line.121"></a>
<span class="sourceLineNo">122</span>                                base = null;<a name="line.122"></a>
<span class="sourceLineNo">123</span>                                odata = data = createArray(size);<a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124"></a>
<span class="sourceLineNo">125</span>                                IndexIterator iter = dataset.getIterator();<a name="line.125"></a>
<span class="sourceLineNo">126</span>                                for (int i = 0; iter.hasNext(); i++) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>                                        data[i] = dataset.data[iter.index];<a name="line.127"></a>
<span class="sourceLineNo">128</span>                                }<a name="line.128"></a>
<span class="sourceLineNo">129</span>                        }<a name="line.129"></a>
<span class="sourceLineNo">130</span>                } catch (Throwable t) {<a name="line.130"></a>
<span class="sourceLineNo">131</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.131"></a>
<span class="sourceLineNo">132</span>                        throw new IllegalArgumentException(t);<a name="line.132"></a>
<span class="sourceLineNo">133</span>                }<a name="line.133"></a>
<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>        /**<a name="line.136"></a>
<span class="sourceLineNo">137</span>         * Copy and cast a dataset to this class type<a name="line.137"></a>
<span class="sourceLineNo">138</span>         * @param dataset<a name="line.138"></a>
<span class="sourceLineNo">139</span>         */<a name="line.139"></a>
<span class="sourceLineNo">140</span>        FloatDataset(final Dataset dataset) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                copyToView(dataset, this, true, false);<a name="line.141"></a>
<span class="sourceLineNo">142</span>                offset = 0;<a name="line.142"></a>
<span class="sourceLineNo">143</span>                stride = null;<a name="line.143"></a>
<span class="sourceLineNo">144</span>                base = null;<a name="line.144"></a>
<span class="sourceLineNo">145</span>                try {<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        odata = data = createArray(size);<a name="line.146"></a>
<span class="sourceLineNo">147</span>                } catch (Throwable t) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.148"></a>
<span class="sourceLineNo">149</span>                        throw new IllegalArgumentException(t);<a name="line.149"></a>
<span class="sourceLineNo">150</span>                }<a name="line.150"></a>
<span class="sourceLineNo">151</span>                IndexIterator iter = dataset.getIterator();<a name="line.151"></a>
<span class="sourceLineNo">152</span>                for (int i = 0; iter.hasNext(); i++) {<a name="line.152"></a>
<span class="sourceLineNo">153</span>                        data[i] = (float) dataset.getElementDoubleAbs(iter.index); // GET_ELEMENT_WITH_CAST<a name="line.153"></a>
<span class="sourceLineNo">154</span>                }<a name="line.154"></a>
<span class="sourceLineNo">155</span>        }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>        @Override<a name="line.157"></a>
<span class="sourceLineNo">158</span>        public boolean equals(Object obj) {<a name="line.158"></a>
<span class="sourceLineNo">159</span>                if (this == obj) {<a name="line.159"></a>
<span class="sourceLineNo">160</span>                        return true;<a name="line.160"></a>
<span class="sourceLineNo">161</span>                }<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>                if (obj == null) {<a name="line.163"></a>
<span class="sourceLineNo">164</span>                        return false;<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>                if (!getClass().equals(obj.getClass())) {<a name="line.167"></a>
<span class="sourceLineNo">168</span>                        if (getRank() == 0) { // for zero-rank datasets<a name="line.168"></a>
<span class="sourceLineNo">169</span>                                return obj.equals(getObjectAbs(offset));<a name="line.169"></a>
<span class="sourceLineNo">170</span>                        }<a name="line.170"></a>
<span class="sourceLineNo">171</span>                        return false;<a name="line.171"></a>
<span class="sourceLineNo">172</span>                }<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span>                FloatDataset other = (FloatDataset) obj;<a name="line.174"></a>
<span class="sourceLineNo">175</span>                if (size != other.size) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        return false;<a name="line.176"></a>
<span class="sourceLineNo">177</span>                }<a name="line.177"></a>
<span class="sourceLineNo">178</span>                if (!Arrays.equals(shape, other.shape)) {<a name="line.178"></a>
<span class="sourceLineNo">179</span>                        return false;<a name="line.179"></a>
<span class="sourceLineNo">180</span>                }<a name="line.180"></a>
<span class="sourceLineNo">181</span>                if (data == other.data &amp;&amp; stride == null &amp;&amp; other.stride == null) {<a name="line.181"></a>
<span class="sourceLineNo">182</span>                        return true;<a name="line.182"></a>
<span class="sourceLineNo">183</span>                }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>                IndexIterator iter = getIterator();<a name="line.185"></a>
<span class="sourceLineNo">186</span>                IndexIterator oiter = other.getIterator();<a name="line.186"></a>
<span class="sourceLineNo">187</span>                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.187"></a>
<span class="sourceLineNo">188</span>                        if (data[iter.index] != other.data[oiter.index]) { // OBJECT_UNEQUAL<a name="line.188"></a>
<span class="sourceLineNo">189</span>                                return false;<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>                return true;<a name="line.192"></a>
<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>        @Override<a name="line.195"></a>
<span class="sourceLineNo">196</span>        public int hashCode() {<a name="line.196"></a>
<span class="sourceLineNo">197</span>                return super.hashCode();<a name="line.197"></a>
<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>        @Override<a name="line.200"></a>
<span class="sourceLineNo">201</span>        public FloatDataset clone() {<a name="line.201"></a>
<span class="sourceLineNo">202</span>                return new FloatDataset(this);<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>         * Create a dataset from an object which could be a Java list, array (of arrays...) or Number. Ragged<a name="line.206"></a>
<span class="sourceLineNo">207</span>         * sequences or arrays are padded with zeros.<a name="line.207"></a>
<span class="sourceLineNo">208</span>         *<a name="line.208"></a>
<span class="sourceLineNo">209</span>         * @param obj<a name="line.209"></a>
<span class="sourceLineNo">210</span>         * @return dataset with contents given by input<a name="line.210"></a>
<span class="sourceLineNo">211</span>         */<a name="line.211"></a>
<span class="sourceLineNo">212</span>        static FloatDataset createFromObject(final Object obj) {<a name="line.212"></a>
<span class="sourceLineNo">213</span>                FloatDataset result = new FloatDataset();<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>                if (obj != null) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                        result.shape = ShapeUtils.getShapeFromObject(obj);<a name="line.216"></a>
<span class="sourceLineNo">217</span>                        result.size = ShapeUtils.calcSize(result.shape);<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>                        try {<a name="line.219"></a>
<span class="sourceLineNo">220</span>                                result.odata = result.data = createArray(result.size);<a name="line.220"></a>
<span class="sourceLineNo">221</span>                        } catch (Throwable t) {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                                logger.error("Could not create a dataset of shape {}", Arrays.toString(result.shape), t);<a name="line.222"></a>
<span class="sourceLineNo">223</span>                                throw new IllegalArgumentException(t);<a name="line.223"></a>
<span class="sourceLineNo">224</span>                        }<a name="line.224"></a>
<span class="sourceLineNo">225</span><a name="line.225"></a>
<span class="sourceLineNo">226</span>                        int[] pos = new int[result.shape.length];<a name="line.226"></a>
<span class="sourceLineNo">227</span>                        result.fillData(obj, 0, pos);<a name="line.227"></a>
<span class="sourceLineNo">228</span>                }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>                return result;<a name="line.230"></a>
<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
<span class="sourceLineNo">232</span>        <a name="line.232"></a>
<span class="sourceLineNo">233</span>        /**<a name="line.233"></a>
<span class="sourceLineNo">234</span>         *<a name="line.234"></a>
<span class="sourceLineNo">235</span>         * @param stop<a name="line.235"></a>
<span class="sourceLineNo">236</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.236"></a>
<span class="sourceLineNo">237</span>         */<a name="line.237"></a>
<span class="sourceLineNo">238</span>        static FloatDataset createRange(final double stop) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                return createRange(0, stop, 1);<a name="line.239"></a>
<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
<span class="sourceLineNo">241</span>        <a name="line.241"></a>
<span class="sourceLineNo">242</span>        /**<a name="line.242"></a>
<span class="sourceLineNo">243</span>         *<a name="line.243"></a>
<span class="sourceLineNo">244</span>         * @param start<a name="line.244"></a>
<span class="sourceLineNo">245</span>         * @param stop<a name="line.245"></a>
<span class="sourceLineNo">246</span>         * @param step<a name="line.246"></a>
<span class="sourceLineNo">247</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.247"></a>
<span class="sourceLineNo">248</span>         */<a name="line.248"></a>
<span class="sourceLineNo">249</span>        static FloatDataset createRange(final double start, final double stop, final double step) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                int size = calcSteps(start, stop, step);<a name="line.250"></a>
<span class="sourceLineNo">251</span>                FloatDataset result = new FloatDataset(size);<a name="line.251"></a>
<span class="sourceLineNo">252</span>                for (int i = 0; i &lt; size; i++) {<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        result.data[i] = (float) (start + i * step); // PRIM_TYPE // ADD_CAST<a name="line.253"></a>
<span class="sourceLineNo">254</span>                }<a name="line.254"></a>
<span class="sourceLineNo">255</span>                return result;<a name="line.255"></a>
<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>        /**<a name="line.258"></a>
<span class="sourceLineNo">259</span>         * @param shape<a name="line.259"></a>
<span class="sourceLineNo">260</span>         * @return a dataset filled with ones<a name="line.260"></a>
<span class="sourceLineNo">261</span>         */<a name="line.261"></a>
<span class="sourceLineNo">262</span>        static FloatDataset ones(final int... shape) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                return new FloatDataset(shape).fill(1);<a name="line.263"></a>
<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
<span class="sourceLineNo">265</span><a name="line.265"></a>
<span class="sourceLineNo">266</span>        @Override<a name="line.266"></a>
<span class="sourceLineNo">267</span>        public FloatDataset fill(final Object obj) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                setDirty();<a name="line.268"></a>
<span class="sourceLineNo">269</span>                float dv = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // FROM_OBJECT<a name="line.269"></a>
<span class="sourceLineNo">270</span>                IndexIterator iter = getIterator();<a name="line.270"></a>
<span class="sourceLineNo">271</span>                while (iter.hasNext()) {<a name="line.271"></a>
<span class="sourceLineNo">272</span>                        data[iter.index] = dv;<a name="line.272"></a>
<span class="sourceLineNo">273</span>                }<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>                return this;<a name="line.275"></a>
<span class="sourceLineNo">276</span>        }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>        /**<a name="line.278"></a>
<span class="sourceLineNo">279</span>         * This is a typed version of {@link #getBuffer()}<a name="line.279"></a>
<span class="sourceLineNo">280</span>         * @return data buffer as linear array<a name="line.280"></a>
<span class="sourceLineNo">281</span>         */<a name="line.281"></a>
<span class="sourceLineNo">282</span>        public float[] getData() { // PRIM_TYPE<a name="line.282"></a>
<span class="sourceLineNo">283</span>                return data;<a name="line.283"></a>
<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>        @Override<a name="line.286"></a>
<span class="sourceLineNo">287</span>        protected int getBufferLength() {<a name="line.287"></a>
<span class="sourceLineNo">288</span>                if (data == null)<a name="line.288"></a>
<span class="sourceLineNo">289</span>                        return 0;<a name="line.289"></a>
<span class="sourceLineNo">290</span>                return data.length;<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 FloatDataset getView(boolean deepCopyMetadata) {<a name="line.294"></a>
<span class="sourceLineNo">295</span>                FloatDataset view = new FloatDataset();<a name="line.295"></a>
<span class="sourceLineNo">296</span>                copyToView(this, view, true, deepCopyMetadata);<a name="line.296"></a>
<span class="sourceLineNo">297</span>                view.setData();<a name="line.297"></a>
<span class="sourceLineNo">298</span>                return view;<a name="line.298"></a>
<span class="sourceLineNo">299</span>        }<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>        /**<a name="line.301"></a>
<span class="sourceLineNo">302</span>         * Get a value from an absolute index of the internal array. This is an internal method with no checks so can be<a name="line.302"></a>
<span class="sourceLineNo">303</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.303"></a>
<span class="sourceLineNo">304</span>         *<a name="line.304"></a>
<span class="sourceLineNo">305</span>         * @param index<a name="line.305"></a>
<span class="sourceLineNo">306</span>         *            absolute index<a name="line.306"></a>
<span class="sourceLineNo">307</span>         * @return value<a name="line.307"></a>
<span class="sourceLineNo">308</span>         */<a name="line.308"></a>
<span class="sourceLineNo">309</span>        public float getAbs(final int index) { // PRIM_TYPE<a name="line.309"></a>
<span class="sourceLineNo">310</span>                return data[index];<a name="line.310"></a>
<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>        @Override<a name="line.313"></a>
<span class="sourceLineNo">314</span>        public boolean getElementBooleanAbs(final int index) {<a name="line.314"></a>
<span class="sourceLineNo">315</span>                return data[index] != 0; // BOOLEAN_FALSE<a name="line.315"></a>
<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>        @Override<a name="line.318"></a>
<span class="sourceLineNo">319</span>        public double getElementDoubleAbs(final int index) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>                return data[index]; // BOOLEAN_ZERO<a name="line.320"></a>
<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>        @Override<a name="line.323"></a>
<span class="sourceLineNo">324</span>        public long getElementLongAbs(final int index) {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                return DTypeUtils.toLong(data[index]); // BOOLEAN_ZERO // OMIT_TOLONG_INT<a name="line.325"></a>
<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>        @Override<a name="line.328"></a>
<span class="sourceLineNo">329</span>        public Object getObjectAbs(final int index) {<a name="line.329"></a>
<span class="sourceLineNo">330</span>                return data[index];<a name="line.330"></a>
<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>        @Override<a name="line.333"></a>
<span class="sourceLineNo">334</span>        public String getStringAbs(final int index) {<a name="line.334"></a>
<span class="sourceLineNo">335</span>                return stringFormat == null ? String.format("%.8g", data[index]) : // FORMAT_STRING<a name="line.335"></a>
<span class="sourceLineNo">336</span>                        stringFormat.format(data[index]);<a name="line.336"></a>
<span class="sourceLineNo">337</span>        }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>        /**<a name="line.339"></a>
<span class="sourceLineNo">340</span>         * Set a value at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.341"></a>
<span class="sourceLineNo">342</span>         *<a name="line.342"></a>
<span class="sourceLineNo">343</span>         * @param index<a name="line.343"></a>
<span class="sourceLineNo">344</span>         *            absolute index<a name="line.344"></a>
<span class="sourceLineNo">345</span>         * @param val<a name="line.345"></a>
<span class="sourceLineNo">346</span>         *            new value<a name="line.346"></a>
<span class="sourceLineNo">347</span>         */<a name="line.347"></a>
<span class="sourceLineNo">348</span>        public void setAbs(final int index, final float val) { // PRIM_TYPE<a name="line.348"></a>
<span class="sourceLineNo">349</span>                setDirty();<a name="line.349"></a>
<span class="sourceLineNo">350</span>                data[index] = val;<a name="line.350"></a>
<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
<span class="sourceLineNo">353</span>        @Override<a name="line.353"></a>
<span class="sourceLineNo">354</span>        protected void setItemDirect(final int dindex, final int sindex, final Object src) {<a name="line.354"></a>
<span class="sourceLineNo">355</span>                setDirty();<a name="line.355"></a>
<span class="sourceLineNo">356</span>                float[] dsrc = (float[]) src; // PRIM_TYPE<a name="line.356"></a>
<span class="sourceLineNo">357</span>                data[dindex] = dsrc[sindex];<a name="line.357"></a>
<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
<span class="sourceLineNo">359</span><a name="line.359"></a>
<span class="sourceLineNo">360</span>        @Override<a name="line.360"></a>
<span class="sourceLineNo">361</span>        public void setObjectAbs(final int index, final Object obj) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                if (index &lt; 0 || index &gt; data.length) {<a name="line.362"></a>
<span class="sourceLineNo">363</span>                        throw new IndexOutOfBoundsException("Index given is outside dataset");<a name="line.363"></a>
<span class="sourceLineNo">364</span>                }<a name="line.364"></a>
<span class="sourceLineNo">365</span><a name="line.365"></a>
<span class="sourceLineNo">366</span>                setAbs(index, (float) DTypeUtils.toReal(obj)); // FROM_OBJECT<a name="line.366"></a>
<span class="sourceLineNo">367</span>        }<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>         * @return item in first position<a name="line.370"></a>
<span class="sourceLineNo">371</span>         * @since 2.0<a name="line.371"></a>
<span class="sourceLineNo">372</span>         */<a name="line.372"></a>
<span class="sourceLineNo">373</span>        public float get() { // PRIM_TYPE<a name="line.373"></a>
<span class="sourceLineNo">374</span>                return data[getFirst1DIndex()];<a name="line.374"></a>
<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>        /**<a name="line.377"></a>
<span class="sourceLineNo">378</span>         * @param i<a name="line.378"></a>
<span class="sourceLineNo">379</span>         * @return item in given position<a name="line.379"></a>
<span class="sourceLineNo">380</span>         */<a name="line.380"></a>
<span class="sourceLineNo">381</span>        public float get(final int i) { // PRIM_TYPE<a name="line.381"></a>
<span class="sourceLineNo">382</span>                return data[get1DIndex(i)];<a name="line.382"></a>
<span class="sourceLineNo">383</span>        }<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>         * @param i<a name="line.386"></a>
<span class="sourceLineNo">387</span>         * @param j<a name="line.387"></a>
<span class="sourceLineNo">388</span>         * @return item in given position<a name="line.388"></a>
<span class="sourceLineNo">389</span>         */<a name="line.389"></a>
<span class="sourceLineNo">390</span>        public float get(final int i, final int j) { // PRIM_TYPE<a name="line.390"></a>
<span class="sourceLineNo">391</span>                return data[get1DIndex(i, j)];<a name="line.391"></a>
<span class="sourceLineNo">392</span>        }<a name="line.392"></a>
<span class="sourceLineNo">393</span><a name="line.393"></a>
<span class="sourceLineNo">394</span>        /**<a name="line.394"></a>
<span class="sourceLineNo">395</span>         * @param pos<a name="line.395"></a>
<span class="sourceLineNo">396</span>         * @return item in given position<a name="line.396"></a>
<span class="sourceLineNo">397</span>         */<a name="line.397"></a>
<span class="sourceLineNo">398</span>        public float get(final int... pos) { // PRIM_TYPE<a name="line.398"></a>
<span class="sourceLineNo">399</span>                return data[get1DIndex(pos)];<a name="line.399"></a>
<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>        @Override<a name="line.402"></a>
<span class="sourceLineNo">403</span>        public Object getObject() {<a name="line.403"></a>
<span class="sourceLineNo">404</span>                return Float.valueOf(get()); // CLASS_TYPE<a name="line.404"></a>
<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>        @Override<a name="line.407"></a>
<span class="sourceLineNo">408</span>        public Object getObject(final int i) {<a name="line.408"></a>
<span class="sourceLineNo">409</span>                return Float.valueOf(get(i)); // CLASS_TYPE<a name="line.409"></a>
<span class="sourceLineNo">410</span>        }<a name="line.410"></a>
<span class="sourceLineNo">411</span><a name="line.411"></a>
<span class="sourceLineNo">412</span>        @Override<a name="line.412"></a>
<span class="sourceLineNo">413</span>        public Object getObject(final int i, final int j) {<a name="line.413"></a>
<span class="sourceLineNo">414</span>                return Float.valueOf(get(i, j)); // CLASS_TYPE<a name="line.414"></a>
<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>        @Override<a name="line.417"></a>
<span class="sourceLineNo">418</span>        public Object getObject(final int... pos) {<a name="line.418"></a>
<span class="sourceLineNo">419</span>                return Float.valueOf(get(pos)); // CLASS_TYPE<a name="line.419"></a>
<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
<span class="sourceLineNo">423</span>        public String getString() {<a name="line.423"></a>
<span class="sourceLineNo">424</span>                return getStringAbs(getFirst1DIndex());<a name="line.424"></a>
<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>        @Override<a name="line.427"></a>
<span class="sourceLineNo">428</span>        public String getString(final int i) {<a name="line.428"></a>
<span class="sourceLineNo">429</span>                return getStringAbs(get1DIndex(i));<a name="line.429"></a>
<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
<span class="sourceLineNo">433</span>        public String getString(final int i, final int j) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>                return getStringAbs(get1DIndex(i, j));<a name="line.434"></a>
<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>        @Override<a name="line.437"></a>
<span class="sourceLineNo">438</span>        public String getString(final int... pos) {<a name="line.438"></a>
<span class="sourceLineNo">439</span>                return getStringAbs(get1DIndex(pos));<a name="line.439"></a>
<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>        @Override<a name="line.442"></a>
<span class="sourceLineNo">443</span>        public double getDouble() {<a name="line.443"></a>
<span class="sourceLineNo">444</span>                return get(); // BOOLEAN_ZERO<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>        public double getDouble(final int i) {<a name="line.448"></a>
<span class="sourceLineNo">449</span>                return get(i); // BOOLEAN_ZERO<a name="line.449"></a>
<span class="sourceLineNo">450</span>        }<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>        @Override<a name="line.452"></a>
<span class="sourceLineNo">453</span>        public double getDouble(final int i, final int j) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>                return get(i, j); // BOOLEAN_ZERO<a name="line.454"></a>
<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>        @Override<a name="line.457"></a>
<span class="sourceLineNo">458</span>        public double getDouble(final int... pos) {<a name="line.458"></a>
<span class="sourceLineNo">459</span>                return get(pos); // BOOLEAN_ZERO<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>        @Override<a name="line.462"></a>
<span class="sourceLineNo">463</span>        public float getFloat() {<a name="line.463"></a>
<span class="sourceLineNo">464</span>                return get(); // BOOLEAN_ZERO // OMIT_REAL_CAST<a name="line.464"></a>
<span class="sourceLineNo">465</span>        }<a name="line.465"></a>
<span class="sourceLineNo">466</span><a name="line.466"></a>
<span class="sourceLineNo">467</span>        @Override<a name="line.467"></a>
<span class="sourceLineNo">468</span>        public float getFloat(final int i) {<a name="line.468"></a>
<span class="sourceLineNo">469</span>                return get(i); // BOOLEAN_ZERO // OMIT_REAL_CAST<a name="line.469"></a>
<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>        @Override<a name="line.472"></a>
<span class="sourceLineNo">473</span>        public float getFloat(final int i, final int j) {<a name="line.473"></a>
<span class="sourceLineNo">474</span>                return get(i, j); // BOOLEAN_ZERO // OMIT_REAL_CAST<a name="line.474"></a>
<span class="sourceLineNo">475</span>        }<a name="line.475"></a>
<span class="sourceLineNo">476</span><a name="line.476"></a>
<span class="sourceLineNo">477</span>        @Override<a name="line.477"></a>
<span class="sourceLineNo">478</span>        public float getFloat(final int... pos) {<a name="line.478"></a>
<span class="sourceLineNo">479</span>                return get(pos); // BOOLEAN_ZERO // OMIT_REAL_CAST<a name="line.479"></a>
<span class="sourceLineNo">480</span>        }<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>        @Override<a name="line.482"></a>
<span class="sourceLineNo">483</span>        public long getLong() {<a name="line.483"></a>
<span class="sourceLineNo">484</span>                return (long) get(); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.484"></a>
<span class="sourceLineNo">485</span>        }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>        @Override<a name="line.487"></a>
<span class="sourceLineNo">488</span>        public long getLong(final int i) {<a name="line.488"></a>
<span class="sourceLineNo">489</span>                return (long) get(i); // BOOLEAN_ZERO // OMIT_UPCAST<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 long getLong(final int i, final int j) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                return (long) get(i, j); // BOOLEAN_ZERO // OMIT_UPCAST<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 long getLong(final int... pos) {<a name="line.498"></a>
<span class="sourceLineNo">499</span>                return (long) get(pos); // BOOLEAN_ZERO // OMIT_UPCAST<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 int getInt() {<a name="line.503"></a>
<span class="sourceLineNo">504</span>                return (int) get(); // BOOLEAN_ZERO // OMIT_UPCAST<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>        public int getInt(final int i) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>                return (int) get(i); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.509"></a>
<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>        @Override<a name="line.512"></a>
<span class="sourceLineNo">513</span>        public int getInt(final int i, final int j) {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                return (int) get(i, j); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>        @Override<a name="line.517"></a>
<span class="sourceLineNo">518</span>        public int getInt(final int... pos) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                return (int) get(pos); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.519"></a>
<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
<span class="sourceLineNo">521</span><a name="line.521"></a>
<span class="sourceLineNo">522</span>        @Override<a name="line.522"></a>
<span class="sourceLineNo">523</span>        public short getShort() {<a name="line.523"></a>
<span class="sourceLineNo">524</span>                return (short) get(); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.524"></a>
<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>        @Override<a name="line.527"></a>
<span class="sourceLineNo">528</span>        public short getShort(final int i) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                return (short) get(i); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.529"></a>
<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>        @Override<a name="line.532"></a>
<span class="sourceLineNo">533</span>        public short getShort(final int i, final int j) {<a name="line.533"></a>
<span class="sourceLineNo">534</span>                return (short) get(i, j); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.534"></a>
<span class="sourceLineNo">535</span>        }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span>        @Override<a name="line.537"></a>
<span class="sourceLineNo">538</span>        public short getShort(final int... pos) {<a name="line.538"></a>
<span class="sourceLineNo">539</span>                return (short) get(pos); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.539"></a>
<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>        @Override<a name="line.542"></a>
<span class="sourceLineNo">543</span>        public byte getByte() {<a name="line.543"></a>
<span class="sourceLineNo">544</span>                return (byte) get(); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.544"></a>
<span class="sourceLineNo">545</span>        }<a name="line.545"></a>
<span class="sourceLineNo">546</span><a name="line.546"></a>
<span class="sourceLineNo">547</span>        @Override<a name="line.547"></a>
<span class="sourceLineNo">548</span>        public byte getByte(final int i) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                return (byte) get(i); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.549"></a>
<span class="sourceLineNo">550</span>        }<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>        @Override<a name="line.552"></a>
<span class="sourceLineNo">553</span>        public byte getByte(final int i, final int j) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                return (byte) get(i, j); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.554"></a>
<span class="sourceLineNo">555</span>        }<a name="line.555"></a>
<span class="sourceLineNo">556</span><a name="line.556"></a>
<span class="sourceLineNo">557</span>        @Override<a name="line.557"></a>
<span class="sourceLineNo">558</span>        public byte getByte(final int... pos) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                return (byte) get(pos); // BOOLEAN_ZERO // OMIT_UPCAST<a name="line.559"></a>
<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>        @Override<a name="line.562"></a>
<span class="sourceLineNo">563</span>        public boolean getBoolean() {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                return get() != 0; // BOOLEAN_FALSE<a name="line.564"></a>
<span class="sourceLineNo">565</span>        }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>        @Override<a name="line.567"></a>
<span class="sourceLineNo">568</span>        public boolean getBoolean(final int i) {<a name="line.568"></a>
<span class="sourceLineNo">569</span>                return get(i) != 0; // BOOLEAN_FALSE<a name="line.569"></a>
<span class="sourceLineNo">570</span>        }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
<span class="sourceLineNo">572</span>        @Override<a name="line.572"></a>
<span class="sourceLineNo">573</span>        public boolean getBoolean(final int i, final int j) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                return get(i, j) != 0; // BOOLEAN_FALSE<a name="line.574"></a>
<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
<span class="sourceLineNo">576</span><a name="line.576"></a>
<span class="sourceLineNo">577</span>        @Override<a name="line.577"></a>
<span class="sourceLineNo">578</span>        public boolean getBoolean(final int... pos) {<a name="line.578"></a>
<span class="sourceLineNo">579</span>                return get(pos) != 0; // BOOLEAN_FALSE<a name="line.579"></a>
<span class="sourceLineNo">580</span>        }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>        /**<a name="line.582"></a>
<span class="sourceLineNo">583</span>         * Sets the value at first point to the passed value. The dataset must not be null<a name="line.583"></a>
<span class="sourceLineNo">584</span>         *<a name="line.584"></a>
<span class="sourceLineNo">585</span>         * @param value<a name="line.585"></a>
<span class="sourceLineNo">586</span>         * @since 2.0<a name="line.586"></a>
<span class="sourceLineNo">587</span>         */<a name="line.587"></a>
<span class="sourceLineNo">588</span>        public void setItem(final float value) { // PRIM_TYPE<a name="line.588"></a>
<span class="sourceLineNo">589</span>                setAbs(getFirst1DIndex(), value);<a name="line.589"></a>
<span class="sourceLineNo">590</span>        }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
<span class="sourceLineNo">592</span>        /**<a name="line.592"></a>
<span class="sourceLineNo">593</span>         * Sets the value at a particular point to the passed value. The dataset must be 1D<a name="line.593"></a>
<span class="sourceLineNo">594</span>         *<a name="line.594"></a>
<span class="sourceLineNo">595</span>         * @param value<a name="line.595"></a>
<span class="sourceLineNo">596</span>         * @param i<a name="line.596"></a>
<span class="sourceLineNo">597</span>         */<a name="line.597"></a>
<span class="sourceLineNo">598</span>        public void setItem(final float value, final int i) { // PRIM_TYPE<a name="line.598"></a>
<span class="sourceLineNo">599</span>                setAbs(get1DIndex(i), value);<a name="line.599"></a>
<span class="sourceLineNo">600</span>        }<a name="line.600"></a>
<span class="sourceLineNo">601</span><a name="line.601"></a>
<span class="sourceLineNo">602</span>        /**<a name="line.602"></a>
<span class="sourceLineNo">603</span>         * Sets the value at a particular point to the passed value. The dataset must be 2D<a name="line.603"></a>
<span class="sourceLineNo">604</span>         *<a name="line.604"></a>
<span class="sourceLineNo">605</span>         * @param value<a name="line.605"></a>
<span class="sourceLineNo">606</span>         * @param i<a name="line.606"></a>
<span class="sourceLineNo">607</span>         * @param j<a name="line.607"></a>
<span class="sourceLineNo">608</span>         */<a name="line.608"></a>
<span class="sourceLineNo">609</span>        public void setItem(final float value, final int i, final int j) { // PRIM_TYPE<a name="line.609"></a>
<span class="sourceLineNo">610</span>                setAbs(get1DIndex(i, j), value);<a name="line.610"></a>
<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
<span class="sourceLineNo">612</span><a name="line.612"></a>
<span class="sourceLineNo">613</span>        /**<a name="line.613"></a>
<span class="sourceLineNo">614</span>         * Sets the value at a particular point to the passed value<a name="line.614"></a>
<span class="sourceLineNo">615</span>         *<a name="line.615"></a>
<span class="sourceLineNo">616</span>         * @param value<a name="line.616"></a>
<span class="sourceLineNo">617</span>         * @param pos<a name="line.617"></a>
<span class="sourceLineNo">618</span>         */<a name="line.618"></a>
<span class="sourceLineNo">619</span>        public void setItem(final float value, final int... pos) { // PRIM_TYPE<a name="line.619"></a>
<span class="sourceLineNo">620</span>                setAbs(get1DIndex(pos), value);<a name="line.620"></a>
<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
<span class="sourceLineNo">622</span><a name="line.622"></a>
<span class="sourceLineNo">623</span>        @Override<a name="line.623"></a>
<span class="sourceLineNo">624</span>        public void set(final Object obj) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>                setItem((float) DTypeUtils.toReal(obj)); // FROM_OBJECT<a name="line.625"></a>
<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>        @Override<a name="line.628"></a>
<span class="sourceLineNo">629</span>        public void set(final Object obj, final int i) {<a name="line.629"></a>
<span class="sourceLineNo">630</span>                setItem((float) DTypeUtils.toReal(obj), i); // FROM_OBJECT<a name="line.630"></a>
<span class="sourceLineNo">631</span>        }<a name="line.631"></a>
<span class="sourceLineNo">632</span><a name="line.632"></a>
<span class="sourceLineNo">633</span>        @Override<a name="line.633"></a>
<span class="sourceLineNo">634</span>        public void set(final Object obj, final int i, final int j) {<a name="line.634"></a>
<span class="sourceLineNo">635</span>                setItem((float) DTypeUtils.toReal(obj), i, j); // FROM_OBJECT<a name="line.635"></a>
<span class="sourceLineNo">636</span>        }<a name="line.636"></a>
<span class="sourceLineNo">637</span><a name="line.637"></a>
<span class="sourceLineNo">638</span>        @Override<a name="line.638"></a>
<span class="sourceLineNo">639</span>        public void set(final Object obj, int... pos) {<a name="line.639"></a>
<span class="sourceLineNo">640</span>                if (pos == null || (pos.length == 0 &amp;&amp; shape.length &gt; 0)) {<a name="line.640"></a>
<span class="sourceLineNo">641</span>                        pos = new int[shape.length];<a name="line.641"></a>
<span class="sourceLineNo">642</span>                }<a name="line.642"></a>
<span class="sourceLineNo">643</span><a name="line.643"></a>
<span class="sourceLineNo">644</span>                setItem((float) DTypeUtils.toReal(obj), pos); // FROM_OBJECT<a name="line.644"></a>
<span class="sourceLineNo">645</span>        }<a name="line.645"></a>
<span class="sourceLineNo">646</span><a name="line.646"></a>
<span class="sourceLineNo">647</span>        @Override<a name="line.647"></a>
<span class="sourceLineNo">648</span>        public void resize(int... newShape) {<a name="line.648"></a>
<span class="sourceLineNo">649</span>                setDirty();<a name="line.649"></a>
<span class="sourceLineNo">650</span>                final IndexIterator iter = getIterator();<a name="line.650"></a>
<span class="sourceLineNo">651</span>                final int nsize = ShapeUtils.calcSize(newShape);<a name="line.651"></a>
<span class="sourceLineNo">652</span>                final float[] ndata; // PRIM_TYPE<a name="line.652"></a>
<span class="sourceLineNo">653</span>                try {<a name="line.653"></a>
<span class="sourceLineNo">654</span>                        ndata = createArray(nsize);<a name="line.654"></a>
<span class="sourceLineNo">655</span>                } catch (Throwable t) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.656"></a>
<span class="sourceLineNo">657</span>                        throw new IllegalArgumentException(t);<a name="line.657"></a>
<span class="sourceLineNo">658</span>                }<a name="line.658"></a>
<span class="sourceLineNo">659</span>                for (int i = 0; iter.hasNext() &amp;&amp; i &lt; nsize; i++) {<a name="line.659"></a>
<span class="sourceLineNo">660</span>                        ndata[i] = data[iter.index];<a name="line.660"></a>
<span class="sourceLineNo">661</span>                }<a name="line.661"></a>
<span class="sourceLineNo">662</span><a name="line.662"></a>
<span class="sourceLineNo">663</span>                odata = data = ndata;<a name="line.663"></a>
<span class="sourceLineNo">664</span>                size = nsize;<a name="line.664"></a>
<span class="sourceLineNo">665</span>                shape = newShape;<a name="line.665"></a>
<span class="sourceLineNo">666</span>                stride = null;<a name="line.666"></a>
<span class="sourceLineNo">667</span>                offset = 0;<a name="line.667"></a>
<span class="sourceLineNo">668</span>                base = null;<a name="line.668"></a>
<span class="sourceLineNo">669</span>        }<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>        @Override<a name="line.671"></a>
<span class="sourceLineNo">672</span>        public FloatDataset sort(Integer axis) {<a name="line.672"></a>
<span class="sourceLineNo">673</span>                setDirty();<a name="line.673"></a>
<span class="sourceLineNo">674</span>                if (axis == null) {<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        if (stride == null) {<a name="line.675"></a>
<span class="sourceLineNo">676</span>                                Arrays.sort(data);<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        } else {<a name="line.677"></a>
<span class="sourceLineNo">678</span>                                FloatDataset ads = clone().sort(null);<a name="line.678"></a>
<span class="sourceLineNo">679</span>                                setSlicedView(getView(false), ads);<a name="line.679"></a>
<span class="sourceLineNo">680</span>                        }<a name="line.680"></a>
<span class="sourceLineNo">681</span>                } else {<a name="line.681"></a>
<span class="sourceLineNo">682</span>                        axis = checkAxis(axis);<a name="line.682"></a>
<span class="sourceLineNo">683</span>                        <a name="line.683"></a>
<span class="sourceLineNo">684</span>                        FloatDataset ads = new FloatDataset(shape[axis]);<a name="line.684"></a>
<span class="sourceLineNo">685</span>                        PositionIterator pi = getPositionIterator(axis);<a name="line.685"></a>
<span class="sourceLineNo">686</span>                        int[] pos = pi.getPos();<a name="line.686"></a>
<span class="sourceLineNo">687</span>                        boolean[] hit = pi.getOmit();<a name="line.687"></a>
<span class="sourceLineNo">688</span>                        while (pi.hasNext()) {<a name="line.688"></a>
<span class="sourceLineNo">689</span>                                copyItemsFromAxes(pos, hit, ads);<a name="line.689"></a>
<span class="sourceLineNo">690</span>                                Arrays.sort(ads.data);<a name="line.690"></a>
<span class="sourceLineNo">691</span>                                setItemsOnAxes(pos, hit, ads.data);<a name="line.691"></a>
<span class="sourceLineNo">692</span>                        }<a name="line.692"></a>
<span class="sourceLineNo">693</span>                }<a name="line.693"></a>
<span class="sourceLineNo">694</span>                return this;<a name="line.694"></a>
<span class="sourceLineNo">695</span>                // throw new UnsupportedOperationException("Cannot sort dataset"); // BOOLEAN_USE<a name="line.695"></a>
<span class="sourceLineNo">696</span>        }<a name="line.696"></a>
<span class="sourceLineNo">697</span><a name="line.697"></a>
<span class="sourceLineNo">698</span>        @Override<a name="line.698"></a>
<span class="sourceLineNo">699</span>        public FloatDataset getUniqueItems() {<a name="line.699"></a>
<span class="sourceLineNo">700</span>                Set&lt;Float&gt; set = new TreeSet&lt;Float&gt;(); // CLASS_TYPE<a name="line.700"></a>
<span class="sourceLineNo">701</span>                IndexIterator it = getIterator();<a name="line.701"></a>
<span class="sourceLineNo">702</span>                while (it.hasNext()) {<a name="line.702"></a>
<span class="sourceLineNo">703</span>                        set.add(data[it.index]);<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>                FloatDataset u = new FloatDataset(set.size()); // CLASS_TYPE<a name="line.706"></a>
<span class="sourceLineNo">707</span>                int i = 0;<a name="line.707"></a>
<span class="sourceLineNo">708</span>                float[] udata = u.getData(); // PRIM_TYPE<a name="line.708"></a>
<span class="sourceLineNo">709</span>                for (Float v : set) { // CLASS_TYPE<a name="line.709"></a>
<span class="sourceLineNo">710</span>                        udata[i++] = v;<a name="line.710"></a>
<span class="sourceLineNo">711</span>                }<a name="line.711"></a>
<span class="sourceLineNo">712</span>                return u;<a name="line.712"></a>
<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
<span class="sourceLineNo">714</span><a name="line.714"></a>
<span class="sourceLineNo">715</span>        @Override<a name="line.715"></a>
<span class="sourceLineNo">716</span>        public FloatDataset getSlice(final SliceIterator siter) {<a name="line.716"></a>
<span class="sourceLineNo">717</span>                FloatDataset result = new FloatDataset(siter.getShape());<a name="line.717"></a>
<span class="sourceLineNo">718</span>                float[] rdata = result.data; // PRIM_TYPE<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
<span class="sourceLineNo">720</span>                for (int i = 0; siter.hasNext(); i++)<a name="line.720"></a>
<span class="sourceLineNo">721</span>                        rdata[i] = data[siter.index];<a name="line.721"></a>
<span class="sourceLineNo">722</span><a name="line.722"></a>
<span class="sourceLineNo">723</span>                result.setName(name + BLOCK_OPEN + Slice.createString(siter.shape, siter.start, siter.stop, siter.step) + BLOCK_CLOSE);<a name="line.723"></a>
<span class="sourceLineNo">724</span>                return result;<a name="line.724"></a>
<span class="sourceLineNo">725</span>        }<a name="line.725"></a>
<span class="sourceLineNo">726</span><a name="line.726"></a>
<span class="sourceLineNo">727</span>        @Override<a name="line.727"></a>
<span class="sourceLineNo">728</span>        public void fillDataset(Dataset result, IndexIterator iter) {<a name="line.728"></a>
<span class="sourceLineNo">729</span>                IndexIterator riter = result.getIterator();<a name="line.729"></a>
<span class="sourceLineNo">730</span>                result.setDirty();<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>                float[] rdata = ((FloatDataset) result).data; // PRIM_TYPE<a name="line.732"></a>
<span class="sourceLineNo">733</span><a name="line.733"></a>
<span class="sourceLineNo">734</span>                while (riter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.734"></a>
<span class="sourceLineNo">735</span>                        rdata[riter.index] = data[iter.index];<a name="line.735"></a>
<span class="sourceLineNo">736</span>                }<a name="line.736"></a>
<span class="sourceLineNo">737</span>        }<a name="line.737"></a>
<span class="sourceLineNo">738</span><a name="line.738"></a>
<span class="sourceLineNo">739</span>        @Override<a name="line.739"></a>
<span class="sourceLineNo">740</span>        public FloatDataset setByBoolean(final Object obj, Dataset selection) {<a name="line.740"></a>
<span class="sourceLineNo">741</span>                setDirty();<a name="line.741"></a>
<span class="sourceLineNo">742</span>                if (obj instanceof Dataset) {<a name="line.742"></a>
<span class="sourceLineNo">743</span>                        final Dataset ds = (Dataset) obj;<a name="line.743"></a>
<span class="sourceLineNo">744</span>                        final int length = ((Number) selection.sum()).intValue();<a name="line.744"></a>
<span class="sourceLineNo">745</span>                        if (length != ds.getSize()) {<a name="line.745"></a>
<span class="sourceLineNo">746</span>                                throw new IllegalArgumentException(<a name="line.746"></a>
<span class="sourceLineNo">747</span>                                                "Number of true items in selection does not match number of items in dataset");<a name="line.747"></a>
<span class="sourceLineNo">748</span>                        }<a name="line.748"></a>
<span class="sourceLineNo">749</span><a name="line.749"></a>
<span class="sourceLineNo">750</span>                        final IndexIterator oiter = ds.getIterator();<a name="line.750"></a>
<span class="sourceLineNo">751</span>                        final BooleanIterator biter = getBooleanIterator(selection);<a name="line.751"></a>
<span class="sourceLineNo">752</span><a name="line.752"></a>
<span class="sourceLineNo">753</span>                        while (biter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.753"></a>
<span class="sourceLineNo">754</span>                                data[biter.index] = (float) ds.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.754"></a>
<span class="sourceLineNo">755</span>                        }<a name="line.755"></a>
<span class="sourceLineNo">756</span>                } else {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                        final float dv = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // FROM_OBJECT<a name="line.757"></a>
<span class="sourceLineNo">758</span>                        final BooleanIterator biter = getBooleanIterator(selection);<a name="line.758"></a>
<span class="sourceLineNo">759</span><a name="line.759"></a>
<span class="sourceLineNo">760</span>                        while (biter.hasNext()) {<a name="line.760"></a>
<span class="sourceLineNo">761</span>                                data[biter.index] = dv;<a name="line.761"></a>
<span class="sourceLineNo">762</span>                        }<a name="line.762"></a>
<span class="sourceLineNo">763</span>                }<a name="line.763"></a>
<span class="sourceLineNo">764</span>                return this;<a name="line.764"></a>
<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>        @Override<a name="line.767"></a>
<span class="sourceLineNo">768</span>        public FloatDataset setBy1DIndex(final Object obj, final Dataset index) {<a name="line.768"></a>
<span class="sourceLineNo">769</span>                setDirty();<a name="line.769"></a>
<span class="sourceLineNo">770</span>                if (obj instanceof Dataset) {<a name="line.770"></a>
<span class="sourceLineNo">771</span>                        final Dataset ds = (Dataset) obj;<a name="line.771"></a>
<span class="sourceLineNo">772</span>                        if (index.getSize() != ds.getSize()) {<a name="line.772"></a>
<span class="sourceLineNo">773</span>                                throw new IllegalArgumentException(<a name="line.773"></a>
<span class="sourceLineNo">774</span>                                                "Number of items in index dataset does not match number of items in dataset");<a name="line.774"></a>
<span class="sourceLineNo">775</span>                        }<a name="line.775"></a>
<span class="sourceLineNo">776</span><a name="line.776"></a>
<span class="sourceLineNo">777</span>                        final IndexIterator oiter = ds.getIterator();<a name="line.777"></a>
<span class="sourceLineNo">778</span>                        final IntegerIterator iter = new IntegerIterator(index, size);<a name="line.778"></a>
<span class="sourceLineNo">779</span><a name="line.779"></a>
<span class="sourceLineNo">780</span>                        while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.780"></a>
<span class="sourceLineNo">781</span>                                data[iter.index] = (float) ds.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.781"></a>
<span class="sourceLineNo">782</span>                        }<a name="line.782"></a>
<span class="sourceLineNo">783</span>                } else {<a name="line.783"></a>
<span class="sourceLineNo">784</span>                        final float dv = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // FROM_OBJECT<a name="line.784"></a>
<span class="sourceLineNo">785</span>                        IntegerIterator iter = new IntegerIterator(index, size);<a name="line.785"></a>
<span class="sourceLineNo">786</span><a name="line.786"></a>
<span class="sourceLineNo">787</span>                        while (iter.hasNext()) {<a name="line.787"></a>
<span class="sourceLineNo">788</span>                                data[iter.index] = dv;<a name="line.788"></a>
<span class="sourceLineNo">789</span>                        }<a name="line.789"></a>
<span class="sourceLineNo">790</span>                }<a name="line.790"></a>
<span class="sourceLineNo">791</span>                return this;<a name="line.791"></a>
<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>        @Override<a name="line.794"></a>
<span class="sourceLineNo">795</span>        public FloatDataset setByIndexes(final Object obj, final Object... indexes) {<a name="line.795"></a>
<span class="sourceLineNo">796</span>                setDirty();<a name="line.796"></a>
<span class="sourceLineNo">797</span>                final IntegersIterator iter = new IntegersIterator(shape, indexes);<a name="line.797"></a>
<span class="sourceLineNo">798</span>                final int[] pos = iter.getPos();<a name="line.798"></a>
<span class="sourceLineNo">799</span><a name="line.799"></a>
<span class="sourceLineNo">800</span>                if (obj instanceof Dataset) {<a name="line.800"></a>
<span class="sourceLineNo">801</span>                        final Dataset ds = (Dataset) obj;<a name="line.801"></a>
<span class="sourceLineNo">802</span>                        if (ShapeUtils.calcSize(iter.getShape()) != ds.getSize()) {<a name="line.802"></a>
<span class="sourceLineNo">803</span>                                throw new IllegalArgumentException(<a name="line.803"></a>
<span class="sourceLineNo">804</span>                                                "Number of items in index datasets does not match number of items in dataset");<a name="line.804"></a>
<span class="sourceLineNo">805</span>                        }<a name="line.805"></a>
<span class="sourceLineNo">806</span><a name="line.806"></a>
<span class="sourceLineNo">807</span>                        final IndexIterator oiter = ds.getIterator();<a name="line.807"></a>
<span class="sourceLineNo">808</span><a name="line.808"></a>
<span class="sourceLineNo">809</span>                        while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.809"></a>
<span class="sourceLineNo">810</span>                                setItem((float) ds.getElementDoubleAbs(oiter.index), pos); // GET_ELEMENT_WITH_CAST<a name="line.810"></a>
<span class="sourceLineNo">811</span>                        }<a name="line.811"></a>
<span class="sourceLineNo">812</span>                } else {<a name="line.812"></a>
<span class="sourceLineNo">813</span>                        final float dv = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // FROM_OBJECT<a name="line.813"></a>
<span class="sourceLineNo">814</span><a name="line.814"></a>
<span class="sourceLineNo">815</span>                        while (iter.hasNext()) {<a name="line.815"></a>
<span class="sourceLineNo">816</span>                                setItem(dv, pos);<a name="line.816"></a>
<span class="sourceLineNo">817</span>                        }<a name="line.817"></a>
<span class="sourceLineNo">818</span>                }<a name="line.818"></a>
<span class="sourceLineNo">819</span>                return this;<a name="line.819"></a>
<span class="sourceLineNo">820</span>        }<a name="line.820"></a>
<span class="sourceLineNo">821</span><a name="line.821"></a>
<span class="sourceLineNo">822</span>        @Override<a name="line.822"></a>
<span class="sourceLineNo">823</span>        FloatDataset setSlicedView(Dataset view, Dataset d) {<a name="line.823"></a>
<span class="sourceLineNo">824</span>                setDirty();<a name="line.824"></a>
<span class="sourceLineNo">825</span>                final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(view, d);<a name="line.825"></a>
<span class="sourceLineNo">826</span><a name="line.826"></a>
<span class="sourceLineNo">827</span>                while (it.hasNext()) {<a name="line.827"></a>
<span class="sourceLineNo">828</span>                        data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.828"></a>
<span class="sourceLineNo">829</span>                }<a name="line.829"></a>
<span class="sourceLineNo">830</span>                return this;<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>        public FloatDataset setSlice(final Object obj, final IndexIterator siter) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>                setDirty();<a name="line.835"></a>
<span class="sourceLineNo">836</span><a name="line.836"></a>
<span class="sourceLineNo">837</span>                if (obj instanceof IDataset) {<a name="line.837"></a>
<span class="sourceLineNo">838</span>                        final IDataset ds = (IDataset) obj;<a name="line.838"></a>
<span class="sourceLineNo">839</span>                        final int[] oshape = ds.getShape();<a name="line.839"></a>
<span class="sourceLineNo">840</span><a name="line.840"></a>
<span class="sourceLineNo">841</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), oshape)) {<a name="line.841"></a>
<span class="sourceLineNo">842</span>                                throw new IllegalArgumentException(String.format(<a name="line.842"></a>
<span class="sourceLineNo">843</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(oshape),<a name="line.843"></a>
<span class="sourceLineNo">844</span>                                                Arrays.toString(siter.getShape())));<a name="line.844"></a>
<span class="sourceLineNo">845</span>                        }<a name="line.845"></a>
<span class="sourceLineNo">846</span><a name="line.846"></a>
<span class="sourceLineNo">847</span>                        if (ds instanceof Dataset) {<a name="line.847"></a>
<span class="sourceLineNo">848</span>                                final Dataset ads = (Dataset) ds;<a name="line.848"></a>
<span class="sourceLineNo">849</span>                                final IndexIterator oiter = ads.getIterator();<a name="line.849"></a>
<span class="sourceLineNo">850</span><a name="line.850"></a>
<span class="sourceLineNo">851</span>                                while (siter.hasNext() &amp;&amp; oiter.hasNext())<a name="line.851"></a>
<span class="sourceLineNo">852</span>                                        data[siter.index] = (float) ads.getElementDoubleAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.852"></a>
<span class="sourceLineNo">853</span>                        } else {<a name="line.853"></a>
<span class="sourceLineNo">854</span>                                final IndexIterator oiter = new PositionIterator(oshape);<a name="line.854"></a>
<span class="sourceLineNo">855</span>                                final int[] pos = oiter.getPos();<a name="line.855"></a>
<span class="sourceLineNo">856</span><a name="line.856"></a>
<span class="sourceLineNo">857</span>                                while (siter.hasNext() &amp;&amp; oiter.hasNext())<a name="line.857"></a>
<span class="sourceLineNo">858</span>                                        data[siter.index] = ds.getFloat(pos); // PRIM_TYPE<a name="line.858"></a>
<span class="sourceLineNo">859</span>                        }<a name="line.859"></a>
<span class="sourceLineNo">860</span>                } else {<a name="line.860"></a>
<span class="sourceLineNo">861</span>                        try {<a name="line.861"></a>
<span class="sourceLineNo">862</span>                                float v = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // FROM_OBJECT<a name="line.862"></a>
<span class="sourceLineNo">863</span><a name="line.863"></a>
<span class="sourceLineNo">864</span>                                while (siter.hasNext())<a name="line.864"></a>
<span class="sourceLineNo">865</span>                                        data[siter.index] = v;<a name="line.865"></a>
<span class="sourceLineNo">866</span>                        } catch (IllegalArgumentException e) {<a name="line.866"></a>
<span class="sourceLineNo">867</span>                                throw new IllegalArgumentException("Object for setting slice is not a dataset or number");<a name="line.867"></a>
<span class="sourceLineNo">868</span>                        }<a name="line.868"></a>
<span class="sourceLineNo">869</span>                }<a name="line.869"></a>
<span class="sourceLineNo">870</span>                return this;<a name="line.870"></a>
<span class="sourceLineNo">871</span>        }<a name="line.871"></a>
<span class="sourceLineNo">872</span><a name="line.872"></a>
<span class="sourceLineNo">873</span>        @Override<a name="line.873"></a>
<span class="sourceLineNo">874</span>        public void copyItemsFromAxes(final int[] pos, final boolean[] axes, final Dataset dest) {<a name="line.874"></a>
<span class="sourceLineNo">875</span>                float[] ddata = (float[]) dest.getBuffer(); // PRIM_TYPE<a name="line.875"></a>
<span class="sourceLineNo">876</span><a name="line.876"></a>
<span class="sourceLineNo">877</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.877"></a>
<span class="sourceLineNo">878</span>                int[] sshape = ShapeUtils.squeezeShape(siter.getShape(), false);<a name="line.878"></a>
<span class="sourceLineNo">879</span><a name="line.879"></a>
<span class="sourceLineNo">880</span>                IndexIterator diter = dest.getSliceIterator(null, sshape, null);<a name="line.880"></a>
<span class="sourceLineNo">881</span><a name="line.881"></a>
<span class="sourceLineNo">882</span>                if (ddata.length &lt; ShapeUtils.calcSize(sshape)) {<a name="line.882"></a>
<span class="sourceLineNo">883</span>                        throw new IllegalArgumentException("destination array is not large enough");<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>                dest.setDirty();<a name="line.886"></a>
<span class="sourceLineNo">887</span>                while (siter.hasNext() &amp;&amp; diter.hasNext()) {<a name="line.887"></a>
<span class="sourceLineNo">888</span>                        ddata[diter.index] = data[siter.index];<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><a name="line.891"></a>
<span class="sourceLineNo">892</span>        @Override<a name="line.892"></a>
<span class="sourceLineNo">893</span>        public void setItemsOnAxes(final int[] pos, final boolean[] axes, final Object src) {<a name="line.893"></a>
<span class="sourceLineNo">894</span>                setDirty();<a name="line.894"></a>
<span class="sourceLineNo">895</span>                float[] sdata = (float[]) src; // PRIM_TYPE<a name="line.895"></a>
<span class="sourceLineNo">896</span><a name="line.896"></a>
<span class="sourceLineNo">897</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.897"></a>
<span class="sourceLineNo">898</span><a name="line.898"></a>
<span class="sourceLineNo">899</span>                if (sdata.length &lt; ShapeUtils.calcSize(siter.getShape())) {<a name="line.899"></a>
<span class="sourceLineNo">900</span>                        throw new IllegalArgumentException("destination array is not large enough");<a name="line.900"></a>
<span class="sourceLineNo">901</span>                }<a name="line.901"></a>
<span class="sourceLineNo">902</span><a name="line.902"></a>
<span class="sourceLineNo">903</span>                for (int i = 0; siter.hasNext(); i++) {<a name="line.903"></a>
<span class="sourceLineNo">904</span>                        data[siter.index] = sdata[i];<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><a name="line.907"></a>
<span class="sourceLineNo">908</span>        private List&lt;int[]&gt; findPositions(final float value) { // PRIM_TYPE<a name="line.908"></a>
<span class="sourceLineNo">909</span>                IndexIterator iter = getIterator(true);<a name="line.909"></a>
<span class="sourceLineNo">910</span>                List&lt;int[]&gt; posns = new ArrayList&lt;int[]&gt;();<a name="line.910"></a>
<span class="sourceLineNo">911</span>                int[] pos = iter.getPos();<a name="line.911"></a>
<span class="sourceLineNo">912</span><a name="line.912"></a>
<span class="sourceLineNo">913</span>                if (Float.isNaN(value)) { // CLASS_TYPE // REAL_ONLY<a name="line.913"></a>
<span class="sourceLineNo">914</span>                        while (iter.hasNext()) { // REAL_ONLY<a name="line.914"></a>
<span class="sourceLineNo">915</span>                                if (Double.isNaN(data[iter.index])) { // REAL_ONLY<a name="line.915"></a>
<span class="sourceLineNo">916</span>                                        posns.add(pos.clone()); // REAL_ONLY<a name="line.916"></a>
<span class="sourceLineNo">917</span>                                } // REAL_ONLY<a name="line.917"></a>
<span class="sourceLineNo">918</span>                        } // REAL_ONLY<a name="line.918"></a>
<span class="sourceLineNo">919</span>                } else // REAL_ONLY<a name="line.919"></a>
<span class="sourceLineNo">920</span>                {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                        while (iter.hasNext()) {<a name="line.921"></a>
<span class="sourceLineNo">922</span>                                if (data[iter.index] == value) {<a name="line.922"></a>
<span class="sourceLineNo">923</span>                                        posns.add(pos.clone());<a name="line.923"></a>
<span class="sourceLineNo">924</span>                                }<a name="line.924"></a>
<span class="sourceLineNo">925</span>                        }<a name="line.925"></a>
<span class="sourceLineNo">926</span>                }<a name="line.926"></a>
<span class="sourceLineNo">927</span>                return posns;<a name="line.927"></a>
<span class="sourceLineNo">928</span>        }<a name="line.928"></a>
<span class="sourceLineNo">929</span><a name="line.929"></a>
<span class="sourceLineNo">930</span>        @Override<a name="line.930"></a>
<span class="sourceLineNo">931</span>        public int[] maxPos(boolean... ignoreInvalids) {<a name="line.931"></a>
<span class="sourceLineNo">932</span>                StatisticsMetadata&lt;Number&gt; md = getStats(); // PRIM_TYPE<a name="line.932"></a>
<span class="sourceLineNo">933</span>                // StatisticsMetadata&lt;Number&gt; md = getStats(); // BOOLEAN_USE<a name="line.933"></a>
<span class="sourceLineNo">934</span>                // StatisticsMetadata&lt;String&gt; md = getStringStats(); // OBJECT_USE<a name="line.934"></a>
<span class="sourceLineNo">935</span>                List&lt;int[]&gt; max = md.getMaximumPositions(ignoreInvalids);<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>                if (max == null) {<a name="line.937"></a>
<span class="sourceLineNo">938</span>                        max = findPositions(md.getMaximum(ignoreInvalids).floatValue()); // PRIM_TYPE<a name="line.938"></a>
<span class="sourceLineNo">939</span>                        // max = findPositions(md.getMaximum(ignoreInvalids).intValue() != 0); // BOOLEAN_USE<a name="line.939"></a>
<span class="sourceLineNo">940</span>                        // max = findPositions(md.getMaximum(ignoreInvalids).toString()); // OBJECT_USE<a name="line.940"></a>
<span class="sourceLineNo">941</span><a name="line.941"></a>
<span class="sourceLineNo">942</span>                        md.setMaximumPositions(max);<a name="line.942"></a>
<span class="sourceLineNo">943</span>                }<a name="line.943"></a>
<span class="sourceLineNo">944</span><a name="line.944"></a>
<span class="sourceLineNo">945</span>                return max.get(0); // first maximum<a name="line.945"></a>
<span class="sourceLineNo">946</span>        }<a name="line.946"></a>
<span class="sourceLineNo">947</span><a name="line.947"></a>
<span class="sourceLineNo">948</span>        @Override<a name="line.948"></a>
<span class="sourceLineNo">949</span>        public int[] minPos(boolean... ignoreInvalids) {<a name="line.949"></a>
<span class="sourceLineNo">950</span>                StatisticsMetadata&lt;Number&gt; md = getStats(); // PRIM_TYPE<a name="line.950"></a>
<span class="sourceLineNo">951</span>                // StatisticsMetadata&lt;Number&gt; md = getStats(); // BOOLEAN_USE<a name="line.951"></a>
<span class="sourceLineNo">952</span>                // StatisticsMetadata&lt;String&gt; md = getStringStats(); // OBJECT_USE<a name="line.952"></a>
<span class="sourceLineNo">953</span>                List&lt;int[]&gt; min = md.getMinimumPositions(ignoreInvalids);<a name="line.953"></a>
<span class="sourceLineNo">954</span><a name="line.954"></a>
<span class="sourceLineNo">955</span>                if (min == null) {<a name="line.955"></a>
<span class="sourceLineNo">956</span>                        min = findPositions(md.getMinimum(ignoreInvalids).floatValue()); // PRIM_TYPE<a name="line.956"></a>
<span class="sourceLineNo">957</span>                        // min = findPositions(md.getMinimum(ignoreInvalids).intValue() != 0); // BOOLEAN_USE<a name="line.957"></a>
<span class="sourceLineNo">958</span>                        // min = findPositions(md.getMinimum(ignoreInvalids).toString()); // OBJECT_USE<a name="line.958"></a>
<span class="sourceLineNo">959</span><a name="line.959"></a>
<span class="sourceLineNo">960</span>                        md.setMinimumPositions(min);<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>                return min.get(0); // first minimum<a name="line.963"></a>
<span class="sourceLineNo">964</span>        }<a name="line.964"></a>
<span class="sourceLineNo">965</span><a name="line.965"></a>
<span class="sourceLineNo">966</span>        @Override<a name="line.966"></a>
<span class="sourceLineNo">967</span>        public boolean containsNans() {<a name="line.967"></a>
<span class="sourceLineNo">968</span>                IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.968"></a>
<span class="sourceLineNo">969</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.969"></a>
<span class="sourceLineNo">970</span>                        if (Float.isNaN(data[iter.index])) // CLASS_TYPE // REAL_ONLY<a name="line.970"></a>
<span class="sourceLineNo">971</span>                                return true; // REAL_ONLY<a name="line.971"></a>
<span class="sourceLineNo">972</span>                } // REAL_ONLY<a name="line.972"></a>
<span class="sourceLineNo">973</span>                return false;<a name="line.973"></a>
<span class="sourceLineNo">974</span>        }<a name="line.974"></a>
<span class="sourceLineNo">975</span><a name="line.975"></a>
<span class="sourceLineNo">976</span>        @Override<a name="line.976"></a>
<span class="sourceLineNo">977</span>        public boolean containsInfs() {<a name="line.977"></a>
<span class="sourceLineNo">978</span>                IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.978"></a>
<span class="sourceLineNo">979</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.979"></a>
<span class="sourceLineNo">980</span>                        if (Float.isInfinite(data[iter.index])) // CLASS_TYPE // REAL_ONLY<a name="line.980"></a>
<span class="sourceLineNo">981</span>                                return true; // REAL_ONLY<a name="line.981"></a>
<span class="sourceLineNo">982</span>                } // REAL_ONLY<a name="line.982"></a>
<span class="sourceLineNo">983</span>                return false;<a name="line.983"></a>
<span class="sourceLineNo">984</span>        }<a name="line.984"></a>
<span class="sourceLineNo">985</span><a name="line.985"></a>
<span class="sourceLineNo">986</span>        @Override<a name="line.986"></a>
<span class="sourceLineNo">987</span>        public boolean containsInvalidNumbers() {<a name="line.987"></a>
<span class="sourceLineNo">988</span>                IndexIterator iter = getIterator(); // REAL_ONLY<a name="line.988"></a>
<span class="sourceLineNo">989</span>                while (iter.hasNext()) { // REAL_ONLY<a name="line.989"></a>
<span class="sourceLineNo">990</span>                        float x = data[iter.index]; // PRIM_TYPE // REAL_ONLY<a name="line.990"></a>
<span class="sourceLineNo">991</span>                        if (Float.isNaN(x) || Float.isInfinite(x)) // CLASS_TYPE // REAL_ONLY<a name="line.991"></a>
<span class="sourceLineNo">992</span>                                return true; // REAL_ONLY<a name="line.992"></a>
<span class="sourceLineNo">993</span>                } // REAL_ONLY<a name="line.993"></a>
<span class="sourceLineNo">994</span>                return false;<a name="line.994"></a>
<span class="sourceLineNo">995</span>        }<a name="line.995"></a>
<span class="sourceLineNo">996</span><a name="line.996"></a>
<span class="sourceLineNo">997</span>        @Override<a name="line.997"></a>
<span class="sourceLineNo">998</span>        public FloatDataset iadd(final Object b) {<a name="line.998"></a>
<span class="sourceLineNo">999</span>                setDirty();<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                if (bds.getSize() == 1) {<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                        final IndexIterator it = getIterator();<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>                        final int bOffset = bds.getOffset();<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>                        if (useLong) {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                                while (it.hasNext()) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                                        data[it.index] += lb;<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                                }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                        } else {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                                while (it.hasNext()) {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                                        data[it.index] += db;<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                                }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                        }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                } else {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                        it.setOutputDouble(!useLong);<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                        if (useLong) {<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                                while (it.hasNext()) {<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                                        data[it.aIndex] += it.bLong;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                                }<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        } else {<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                                while (it.hasNext()) {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                                        data[it.aIndex] += it.bDouble;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                                }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                        }<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                }<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>                return this;<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>        @Override<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>        public FloatDataset isubtract(final Object b) {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                setDirty();<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                if (bds.getSize() == 1) {<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                        final IndexIterator it = getIterator();<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                        final int bOffset = bds.getOffset();<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                        if (useLong) {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                                while (it.hasNext()) {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                                        data[it.index] -= lb;<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                                }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                        } else {<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>                                while (it.hasNext()) {<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>                                        data[it.index] -= db;<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>                                }<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>                        }<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>                } else {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                        if (useLong) {<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>                                it.setOutputDouble(false);<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                                while (it.hasNext()) {<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>                                        data[it.aIndex] -= it.bLong;<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                                }<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>                        } else {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                                it.setOutputDouble(true);<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                                while (it.hasNext()) {<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                                        data[it.aIndex] -= it.bDouble;<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>                return this;<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
<span class="sourceLineNo">1067</span><a name="line.1067"></a>
<span class="sourceLineNo">1068</span>        @Override<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>        public FloatDataset imultiply(final Object b) {<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>                setDirty();<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>                if (bds.getSize() == 1) {<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>                        final IndexIterator it = getIterator();<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>                        final int bOffset = bds.getOffset();<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>                        if (useLong) {<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                                while (it.hasNext()) {<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                                        data[it.index] *= lb;<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>                                }<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                        } else {<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>                                while (it.hasNext()) {<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                                        data[it.index] *= db;<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>                } else {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                        it.setOutputDouble(!useLong);<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                        if (useLong) {<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                                while (it.hasNext()) {<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                                        data[it.aIndex] *= it.bLong;<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                                }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                        } else {<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                                while (it.hasNext()) {<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>                                        data[it.aIndex] *= it.bDouble;<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>                return this;<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>        }<a name="line.1101"></a>
<span class="sourceLineNo">1102</span><a name="line.1102"></a>
<span class="sourceLineNo">1103</span>        @Override<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>        public FloatDataset idivide(final Object b) {<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>                setDirty();<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                if (bds.getSize() == 1) {<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                        final int bOffset = bds.getOffset();<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                        if (useLong) {<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>                                // if (lb == 0) { // INT_USE<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>                                //      fill(0); // INT_USE<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>                                // } else { // INT_USE<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>                                final IndexIterator it = getIterator();<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                                while (it.hasNext()) {<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                                        data[it.index] /= lb;<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                                }<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                                // } // INT_USE<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                        } else {<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                                // if (db == 0) { // INT_USE<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>                                //      fill(0); // INT_USE<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                                // } else { // INT_USE<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                                final IndexIterator it = getIterator();<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>                                while (it.hasNext()) {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                                        data[it.index] /= db;<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                                }<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                                // } // INT_USE<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>                        }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>                } else {<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>                        it.setOutputDouble(!useLong);<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                        if (useLong) {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                                while (it.hasNext()) {<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                                        // if (it.bLong == 0) { // INT_USE<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                                        // } else { // INT_USE<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                                        data[it.aIndex] /= it.bLong;<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                                        // } // INT_USE<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                                }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                        } else {<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                                while (it.hasNext()) {<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                                        // if (it.bDouble == 0) { // INT_USE<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                                        // } else { // INT_USE<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                                        data[it.aIndex] /= it.bDouble;<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                                        // } // INT_USE<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>                }<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                return this;<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>        }<a name="line.1153"></a>
<span class="sourceLineNo">1154</span><a name="line.1154"></a>
<span class="sourceLineNo">1155</span>        @Override<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>        public FloatDataset ifloor() {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                setDirty(); // REAL_ONLY<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                IndexIterator it = getIterator(); // REAL_ONLY<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                while (it.hasNext()) { // REAL_ONLY<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                        data[it.index] = (float) Math.floor(data[it.index]); // PRIM_TYPE // REAL_ONLY // ADD_CAST<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                } // REAL_ONLY<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                return this;<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>        }<a name="line.1163"></a>
<span class="sourceLineNo">1164</span><a name="line.1164"></a>
<span class="sourceLineNo">1165</span>        @Override<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>        public FloatDataset iremainder(final Object b) {<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>                setDirty();<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                if (bds.getSize() == 1) {<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>                        final int bOffset = bds.getOffset();<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                        if (useLong) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                                // if (lb == 0) { // INT_USE<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                                //      fill(0); // INT_USE<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>                                // } else { // INT_USE<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>                                final IndexIterator it = getIterator();<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>                                while (it.hasNext()) {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>                                        data[it.index] %= lb;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>                                }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>                                // } // INT_USE<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>                        } else {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>                                // if (lb == 0) { // INT_USE<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>                                //      fill(0); // INT_USE<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>                                // } else { // INT_USE<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                                final IndexIterator it = getIterator();<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                                while (it.hasNext()) {<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                                        data[it.index] %= lb;<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                                }<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                                // } // INT_USE<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                        }<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                } else {<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                        it.setOutputDouble(!useLong);<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                        if (useLong) {<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                                while (it.hasNext()) {<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                                        data[it.aIndex] %= it.bLong; // INT_EXCEPTION<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                                }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>                        } else {<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                                while (it.hasNext()) {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>                                        data[it.aIndex] %= it.bDouble;<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>                                }<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>                        }<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                }<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                return this;<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>        }<a name="line.1207"></a>
<span class="sourceLineNo">1208</span><a name="line.1208"></a>
<span class="sourceLineNo">1209</span>        @Override<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        public FloatDataset ipower(final Object b) {<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                setDirty();<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>                if (bds.getSize() == 1) {<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>                        final int bOffset = bds.getOffset();<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>                        final double vr = bds.getElementDoubleAbs(bOffset);<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                        final IndexIterator it = getIterator();<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                        if (bds.isComplex()) {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>                                final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                                if (vi == 0) {<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>                                        while (it.hasNext()) {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                                                final double v = Math.pow(data[it.index], vr);<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                                                //      data[it.index] = 0; // INT_USE<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                                                // } else { // INT_USE<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                                                data[it.index] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                                                // } // INT_USE<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>                                        final Complex zv = new Complex(vr, vi);<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                                        while (it.hasNext()) {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                                                Complex zd = new Complex(data[it.index], 0);<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                                                final double v = zd.pow(zv).getReal();<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                                // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                                                //      data[it.index] = 0; // INT_USE<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                                                // } else { // INT_USE<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                                                data[it.index] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                                                // } // INT_USE<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                                        }<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                                }<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                        } else {// NAN_OMIT<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>                                while (it.hasNext()) {<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>                                        final double v = Math.pow(data[it.index], vr);<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>                                        //      data[it.index] = 0; // INT_USE<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>                                        // } else { // INT_USE<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>                                        data[it.index] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>                                        // } // INT_USE<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                                }<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                        }<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                } else {<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>                        it.setOutputDouble(true);<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>                        if (bds.isComplex()) {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>                                while (it.hasNext()) {<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>                                        final Complex zv = new Complex(it.bDouble, bds.getElementDoubleAbs(it.bIndex + 1));<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                                        final double v = new Complex(it.aDouble, 0).pow(zv).getReal();<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>                                        // } else { // INT_USE<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>                                        data[it.aIndex] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                                        // } // INT_USE<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>                                }<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>                        } else {// NAN_OMIT<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                                while (it.hasNext()) {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>                                        final double v = Math.pow(it.aDouble, it.bDouble);<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>                                        // if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>                                        //      data[it.aIndex] = 0; // INT_USE<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>                                        // } else { // INT_USE<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>                                        data[it.aIndex] = (float) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>                                        // } // INT_USE<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>                                }<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>                        }<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>                }<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>                return this;<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
<span class="sourceLineNo">1276</span><a name="line.1276"></a>
<span class="sourceLineNo">1277</span>        @Override<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>        public double residual(final Object b, final Dataset w, boolean ignoreNaNs) {<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>                final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>                it.setOutputDouble(true);<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>                double sum = 0;<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>                double comp = 0;<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>                if (ignoreNaNs) { // REAL_ONLY<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>                        if (w == null) { // REAL_ONLY<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>                                while (it.hasNext()) { // REAL_ONLY<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                                        final double diff = it.aDouble - it.bDouble; // REAL_ONLY<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                                        if (Double.isNaN(diff)) // REAL_ONLY<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                                                continue; // REAL_ONLY<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                                        final double err = diff * diff - comp; // REAL_ONLY<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                                        final double temp = sum + err; // REAL_ONLY<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                                        comp = (temp - sum) - err; // REAL_ONLY<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>                                        sum = temp; // REAL_ONLY<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                                } // REAL_ONLY<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                        } else { // REAL_ONLY<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>                                IndexIterator itw = w.getIterator(); // REAL_ONLY<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) { // REAL_ONLY<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                                        final double diff = it.aDouble - it.bDouble; // REAL_ONLY<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                                        if (Double.isNaN(diff)) // REAL_ONLY<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>                                                continue; // REAL_ONLY<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                                        final double err = diff * diff * w.getElementDoubleAbs(itw.index) - comp; // REAL_ONLY<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>                                        final double temp = sum + err; // REAL_ONLY<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>                                        comp = (temp - sum) - err; // REAL_ONLY<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>                                        sum = temp; // REAL_ONLY<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                                } // REAL_ONLY<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                        } // REAL_ONLY<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                } else // REAL_ONLY<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                {<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                        if (w == null) {<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>                                while (it.hasNext()) {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>                                        final double diff = it.aDouble - it.bDouble;<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                                        final double err = diff * diff - comp;<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                                        final double temp = sum + err;<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                                        comp = (temp - sum) - err;<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>                                        sum = temp;<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>                                }<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>                        } else {<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>                                IndexIterator itw = w.getIterator();<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>                                        final double diff = it.aDouble - it.bDouble;<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                                        final double err = diff * diff * w.getElementDoubleAbs(itw.index) - comp;<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                                        final double temp = sum + err;<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>                                        comp = (temp - sum) - err;<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>                                        sum = temp;<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>                                }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>                        }<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>                }<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>                return sum;<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>        }<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>}<a name="line.1330"></a>




























































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