<!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 ComplexDoubleDataset.java by fromcpxdouble.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><a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.util.Arrays;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.commons.math3.complex.Complex;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
<span class="sourceLineNo">024</span> * Extend compound dataset to hold complex float values // PRIM_TYPE<a name="line.24"></a>
<span class="sourceLineNo">025</span> */<a name="line.25"></a>
<span class="sourceLineNo">026</span>public class ComplexFloatDataset extends CompoundFloatDataset { // CLASS_TYPE<a name="line.26"></a>
<span class="sourceLineNo">027</span>        // pin UID to base class<a name="line.27"></a>
<span class="sourceLineNo">028</span>        private static final long serialVersionUID = Dataset.serialVersionUID;<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>        private static final int ISIZE = 2; // number of elements per item<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>        @Override<a name="line.32"></a>
<span class="sourceLineNo">033</span>        public int getDType() {<a name="line.33"></a>
<span class="sourceLineNo">034</span>                return Dataset.COMPLEX64; // DATA_TYPE<a name="line.34"></a>
<span class="sourceLineNo">035</span>        }<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>        /**<a name="line.37"></a>
<span class="sourceLineNo">038</span>         * Create a null dataset<a name="line.38"></a>
<span class="sourceLineNo">039</span>         */<a name="line.39"></a>
<span class="sourceLineNo">040</span>        ComplexFloatDataset() {<a name="line.40"></a>
<span class="sourceLineNo">041</span>                super(ISIZE);<a name="line.41"></a>
<span class="sourceLineNo">042</span>        }<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>        /**<a name="line.44"></a>
<span class="sourceLineNo">045</span>         * Create a zero-filled dataset of given shape<a name="line.45"></a>
<span class="sourceLineNo">046</span>         * @param shape<a name="line.46"></a>
<span class="sourceLineNo">047</span>         */<a name="line.47"></a>
<span class="sourceLineNo">048</span>        ComplexFloatDataset(final int... shape) {<a name="line.48"></a>
<span class="sourceLineNo">049</span>                super(ISIZE, shape);<a name="line.49"></a>
<span class="sourceLineNo">050</span>        }<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>        /**<a name="line.52"></a>
<span class="sourceLineNo">053</span>         * Create a dataset using given data (real and imaginary parts are grouped in pairs)<a name="line.53"></a>
<span class="sourceLineNo">054</span>         * @param data<a name="line.54"></a>
<span class="sourceLineNo">055</span>         * @param shape (can be null to create 1D dataset)<a name="line.55"></a>
<span class="sourceLineNo">056</span>         */<a name="line.56"></a>
<span class="sourceLineNo">057</span>        ComplexFloatDataset(final float[] data, final int... shape) { // PRIM_TYPE<a name="line.57"></a>
<span class="sourceLineNo">058</span>                super(ISIZE, data, shape);<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>        /**<a name="line.61"></a>
<span class="sourceLineNo">062</span>         * Copy a dataset<a name="line.62"></a>
<span class="sourceLineNo">063</span>         * @param dataset<a name="line.63"></a>
<span class="sourceLineNo">064</span>         */<a name="line.64"></a>
<span class="sourceLineNo">065</span>        ComplexFloatDataset(final ComplexFloatDataset dataset) {<a name="line.65"></a>
<span class="sourceLineNo">066</span>                super(dataset);<a name="line.66"></a>
<span class="sourceLineNo">067</span>        }<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>        /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>         * Create a dataset using given data (real and imaginary parts are given separately)<a name="line.70"></a>
<span class="sourceLineNo">071</span>         * @param realData<a name="line.71"></a>
<span class="sourceLineNo">072</span>         * @param imagData<a name="line.72"></a>
<span class="sourceLineNo">073</span>         * @param shape (can be null or zero-length to create 1D dataset)<a name="line.73"></a>
<span class="sourceLineNo">074</span>         */<a name="line.74"></a>
<span class="sourceLineNo">075</span>        ComplexFloatDataset(final float[] realData, final float[] imagData, int... shape) { // PRIM_TYPE<a name="line.75"></a>
<span class="sourceLineNo">076</span>                if (realData == null || imagData == null) {<a name="line.76"></a>
<span class="sourceLineNo">077</span>                        throw new IllegalArgumentException("Data must not be null");<a name="line.77"></a>
<span class="sourceLineNo">078</span>                }<a name="line.78"></a>
<span class="sourceLineNo">079</span>                int dsize = realData.length &gt; imagData.length ? imagData.length : realData.length;<a name="line.79"></a>
<span class="sourceLineNo">080</span>                if (shape == null || shape.length == 0) {<a name="line.80"></a>
<span class="sourceLineNo">081</span>                        shape = new int[] {dsize};<a name="line.81"></a>
<span class="sourceLineNo">082</span>                }<a name="line.82"></a>
<span class="sourceLineNo">083</span>                isize = ISIZE;<a name="line.83"></a>
<span class="sourceLineNo">084</span>                size = ShapeUtils.calcSize(shape);<a name="line.84"></a>
<span class="sourceLineNo">085</span>                if (size != dsize) {<a name="line.85"></a>
<span class="sourceLineNo">086</span>                        throw new IllegalArgumentException(String.format("Shape %s is not compatible with size of data array, %d",<a name="line.86"></a>
<span class="sourceLineNo">087</span>                                        Arrays.toString(shape), dsize));<a name="line.87"></a>
<span class="sourceLineNo">088</span>                }<a name="line.88"></a>
<span class="sourceLineNo">089</span>                this.shape = size == 0 ? null : shape.clone();<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>                try {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                        odata = data = createArray(size);<a name="line.92"></a>
<span class="sourceLineNo">093</span>                } catch (Throwable t) {<a name="line.93"></a>
<span class="sourceLineNo">094</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.94"></a>
<span class="sourceLineNo">095</span>                        throw new IllegalArgumentException(t);<a name="line.95"></a>
<span class="sourceLineNo">096</span>                }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>                for (int i = 0, n = 0; i &lt; size; i++) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                        data[n++] = realData[i];<a name="line.99"></a>
<span class="sourceLineNo">100</span>                        data[n++] = imagData[i];<a name="line.100"></a>
<span class="sourceLineNo">101</span>                }<a name="line.101"></a>
<span class="sourceLineNo">102</span>        }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>        /**<a name="line.104"></a>
<span class="sourceLineNo">105</span>         * Create a dataset using given data (real and imaginary parts are given separately)<a name="line.105"></a>
<span class="sourceLineNo">106</span>         * @param real<a name="line.106"></a>
<span class="sourceLineNo">107</span>         * @param imag<a name="line.107"></a>
<span class="sourceLineNo">108</span>         */<a name="line.108"></a>
<span class="sourceLineNo">109</span>        ComplexFloatDataset(final Dataset real, final Dataset imag) {<a name="line.109"></a>
<span class="sourceLineNo">110</span>                super(ISIZE, real.getShapeRef());<a name="line.110"></a>
<span class="sourceLineNo">111</span>                real.checkCompatibility(imag);<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>                IndexIterator riter = real.getIterator();<a name="line.113"></a>
<span class="sourceLineNo">114</span>                IndexIterator iiter = imag.getIterator();<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>                for (int i = 0; riter.hasNext() &amp;&amp; iiter.hasNext();) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>                        data[i++] = (float) real.getElementDoubleAbs(riter.index); // ADD_CAST<a name="line.117"></a>
<span class="sourceLineNo">118</span>                        data[i++] = (float) imag.getElementDoubleAbs(iiter.index); // ADD_CAST<a name="line.118"></a>
<span class="sourceLineNo">119</span>                }<a name="line.119"></a>
<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>        /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>         * Copy and cast a dataset to this complex type<a name="line.123"></a>
<span class="sourceLineNo">124</span>         * @param dataset<a name="line.124"></a>
<span class="sourceLineNo">125</span>         */<a name="line.125"></a>
<span class="sourceLineNo">126</span>        ComplexFloatDataset(final Dataset dataset) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>                super(ISIZE, dataset.getShapeRef());<a name="line.127"></a>
<span class="sourceLineNo">128</span>                copyToView(dataset, this, true, false);<a name="line.128"></a>
<span class="sourceLineNo">129</span>                offset = 0;<a name="line.129"></a>
<span class="sourceLineNo">130</span>                stride = null;<a name="line.130"></a>
<span class="sourceLineNo">131</span>                base = null;<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>                IndexIterator iter = dataset.getIterator();<a name="line.133"></a>
<span class="sourceLineNo">134</span>                int disize = dataset.getElementsPerItem();<a name="line.134"></a>
<span class="sourceLineNo">135</span>                if (disize == 1) {<a name="line.135"></a>
<span class="sourceLineNo">136</span>                        for (int i = 0; iter.hasNext(); i += isize) {<a name="line.136"></a>
<span class="sourceLineNo">137</span>                                data[i] = (float) dataset.getElementDoubleAbs(iter.index); // ADD_CAST<a name="line.137"></a>
<span class="sourceLineNo">138</span>                        }<a name="line.138"></a>
<span class="sourceLineNo">139</span>                } else {<a name="line.139"></a>
<span class="sourceLineNo">140</span>                        for (int i = 0; iter.hasNext(); i += isize) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                                data[i] = (float) dataset.getElementDoubleAbs(iter.index); // ADD_CAST<a name="line.141"></a>
<span class="sourceLineNo">142</span>                                data[i+1] = (float) dataset.getElementDoubleAbs(iter.index+1); // ADD_CAST<a name="line.142"></a>
<span class="sourceLineNo">143</span>                        }<a name="line.143"></a>
<span class="sourceLineNo">144</span>                }<a name="line.144"></a>
<span class="sourceLineNo">145</span>        }<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>        @Override<a name="line.147"></a>
<span class="sourceLineNo">148</span>        public ComplexFloatDataset clone() {<a name="line.148"></a>
<span class="sourceLineNo">149</span>                return new ComplexFloatDataset(this);<a name="line.149"></a>
<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>        /**<a name="line.152"></a>
<span class="sourceLineNo">153</span>         * Create a dataset from an object which could be a Java list, array (of arrays...)<a name="line.153"></a>
<span class="sourceLineNo">154</span>         * or Number. Ragged sequences or arrays are padded with zeros.<a name="line.154"></a>
<span class="sourceLineNo">155</span>         *<a name="line.155"></a>
<span class="sourceLineNo">156</span>         * @param obj<a name="line.156"></a>
<span class="sourceLineNo">157</span>         * @return dataset with contents given by input<a name="line.157"></a>
<span class="sourceLineNo">158</span>         */<a name="line.158"></a>
<span class="sourceLineNo">159</span>        static ComplexFloatDataset createFromObject(final Object obj) {<a name="line.159"></a>
<span class="sourceLineNo">160</span>                ComplexFloatDataset result = new ComplexFloatDataset();<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>                result.shape = ShapeUtils.getShapeFromObject(obj);<a name="line.162"></a>
<span class="sourceLineNo">163</span>                result.size = ShapeUtils.calcSize(result.shape);<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>                try {<a name="line.165"></a>
<span class="sourceLineNo">166</span>                        result.odata = result.data = result.createArray(result.size);<a name="line.166"></a>
<span class="sourceLineNo">167</span>                } catch (Throwable t) {<a name="line.167"></a>
<span class="sourceLineNo">168</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(result.shape), t);<a name="line.168"></a>
<span class="sourceLineNo">169</span>                        throw new IllegalArgumentException(t);<a name="line.169"></a>
<span class="sourceLineNo">170</span>                }<a name="line.170"></a>
<span class="sourceLineNo">171</span><a name="line.171"></a>
<span class="sourceLineNo">172</span>                int[] pos = new int[result.shape.length];<a name="line.172"></a>
<span class="sourceLineNo">173</span>                result.fillData(obj, 0, pos);<a name="line.173"></a>
<span class="sourceLineNo">174</span>                return result;<a name="line.174"></a>
<span class="sourceLineNo">175</span>        }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>        /**<a name="line.177"></a>
<span class="sourceLineNo">178</span>         * @param stop<a name="line.178"></a>
<span class="sourceLineNo">179</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.179"></a>
<span class="sourceLineNo">180</span>         */<a name="line.180"></a>
<span class="sourceLineNo">181</span>        static ComplexFloatDataset createRange(final double stop) {<a name="line.181"></a>
<span class="sourceLineNo">182</span>                return createRange(0, stop, 1);<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>        /**<a name="line.185"></a>
<span class="sourceLineNo">186</span>         * @param start<a name="line.186"></a>
<span class="sourceLineNo">187</span>         * @param stop<a name="line.187"></a>
<span class="sourceLineNo">188</span>         * @param step<a name="line.188"></a>
<span class="sourceLineNo">189</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.189"></a>
<span class="sourceLineNo">190</span>         */<a name="line.190"></a>
<span class="sourceLineNo">191</span>        static ComplexFloatDataset createRange(final double start, final double stop, final double step) {<a name="line.191"></a>
<span class="sourceLineNo">192</span>                int size = calcSteps(start, stop, step);<a name="line.192"></a>
<span class="sourceLineNo">193</span>                ComplexFloatDataset result = new ComplexFloatDataset(size);<a name="line.193"></a>
<span class="sourceLineNo">194</span>                for (int i = 0; i &lt; size; i ++) {<a name="line.194"></a>
<span class="sourceLineNo">195</span>                        result.data[i*ISIZE] = (float) (start + i*step); // ADD_CAST<a name="line.195"></a>
<span class="sourceLineNo">196</span>                }<a name="line.196"></a>
<span class="sourceLineNo">197</span>                return result;<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>        /**<a name="line.200"></a>
<span class="sourceLineNo">201</span>         * @param shape<a name="line.201"></a>
<span class="sourceLineNo">202</span>         * @return a dataset filled with ones<a name="line.202"></a>
<span class="sourceLineNo">203</span>         */<a name="line.203"></a>
<span class="sourceLineNo">204</span>        static ComplexFloatDataset ones(final int... shape) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                return new ComplexFloatDataset(shape).fill(1);<a name="line.205"></a>
<span class="sourceLineNo">206</span>        }<a name="line.206"></a>
<span class="sourceLineNo">207</span><a name="line.207"></a>
<span class="sourceLineNo">208</span>        @Override<a name="line.208"></a>
<span class="sourceLineNo">209</span>        public ComplexFloatDataset fill(final Object obj) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                setDirty();<a name="line.210"></a>
<span class="sourceLineNo">211</span>                float vr = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // ADD_CAST<a name="line.211"></a>
<span class="sourceLineNo">212</span>                float vi = (float) DTypeUtils.toImag(obj); // PRIM_TYPE // ADD_CAST<a name="line.212"></a>
<span class="sourceLineNo">213</span>                IndexIterator iter = getIterator();<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>                while (iter.hasNext()) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                        data[iter.index] = vr;<a name="line.216"></a>
<span class="sourceLineNo">217</span>                        data[iter.index+1] = vi;<a name="line.217"></a>
<span class="sourceLineNo">218</span>                }<a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span>                return this;<a name="line.220"></a>
<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>        @Override<a name="line.223"></a>
<span class="sourceLineNo">224</span>        public ComplexFloatDataset getView(boolean deepCopyMetadata) {<a name="line.224"></a>
<span class="sourceLineNo">225</span>                ComplexFloatDataset view = new ComplexFloatDataset();<a name="line.225"></a>
<span class="sourceLineNo">226</span>                copyToView(this, view, true, deepCopyMetadata);<a name="line.226"></a>
<span class="sourceLineNo">227</span>                view.data = data;<a name="line.227"></a>
<span class="sourceLineNo">228</span>                return view;<a name="line.228"></a>
<span class="sourceLineNo">229</span>        }<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>        /**<a name="line.231"></a>
<span class="sourceLineNo">232</span>         * Get complex value at absolute index in the internal array.<a name="line.232"></a>
<span class="sourceLineNo">233</span>         *<a name="line.233"></a>
<span class="sourceLineNo">234</span>         * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator.<a name="line.234"></a>
<span class="sourceLineNo">235</span>         *<a name="line.235"></a>
<span class="sourceLineNo">236</span>         * @param index absolute index<a name="line.236"></a>
<span class="sourceLineNo">237</span>         * @return value<a name="line.237"></a>
<span class="sourceLineNo">238</span>         */<a name="line.238"></a>
<span class="sourceLineNo">239</span>        public Complex getComplexAbs(final int index) {<a name="line.239"></a>
<span class="sourceLineNo">240</span>                return new Complex(data[index], data[index+1]);<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>        @Override<a name="line.243"></a>
<span class="sourceLineNo">244</span>        public Object getObjectAbs(final int index) {<a name="line.244"></a>
<span class="sourceLineNo">245</span>                return new Complex(data[index], data[index+1]);<a name="line.245"></a>
<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span>        @Override<a name="line.248"></a>
<span class="sourceLineNo">249</span>        public String getStringAbs(final int index) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                float di = data[index + 1]; // PRIM_TYPE<a name="line.250"></a>
<span class="sourceLineNo">251</span>                if (stringFormat == null) {<a name="line.251"></a>
<span class="sourceLineNo">252</span>                        return di &gt;= 0 ? String.format("%.8g + %.8gj", data[index], di) : // FORMAT_STRING<a name="line.252"></a>
<span class="sourceLineNo">253</span>                                String.format("%.8g - %.8gj", data[index], -di); // FORMAT_STRING<a name="line.253"></a>
<span class="sourceLineNo">254</span>                }<a name="line.254"></a>
<span class="sourceLineNo">255</span>                StringBuilder s = new StringBuilder();<a name="line.255"></a>
<span class="sourceLineNo">256</span>                s.append(stringFormat.format(data[index]));<a name="line.256"></a>
<span class="sourceLineNo">257</span>                if (di &gt;= 0) {<a name="line.257"></a>
<span class="sourceLineNo">258</span>                        s.append(" + ");<a name="line.258"></a>
<span class="sourceLineNo">259</span>                        s.append(stringFormat.format(di));<a name="line.259"></a>
<span class="sourceLineNo">260</span>                } else {<a name="line.260"></a>
<span class="sourceLineNo">261</span>                        s.append(" - ");<a name="line.261"></a>
<span class="sourceLineNo">262</span>                        s.append(stringFormat.format(-di));<a name="line.262"></a>
<span class="sourceLineNo">263</span>                }<a name="line.263"></a>
<span class="sourceLineNo">264</span>                s.append('j');<a name="line.264"></a>
<span class="sourceLineNo">265</span>                return s.toString();<a name="line.265"></a>
<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>        /**<a name="line.268"></a>
<span class="sourceLineNo">269</span>         * Set values at absolute index in the internal array.<a name="line.269"></a>
<span class="sourceLineNo">270</span>         *<a name="line.270"></a>
<span class="sourceLineNo">271</span>         * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator.<a name="line.271"></a>
<span class="sourceLineNo">272</span>         * @param index absolute index<a name="line.272"></a>
<span class="sourceLineNo">273</span>         * @param val new values<a name="line.273"></a>
<span class="sourceLineNo">274</span>         */<a name="line.274"></a>
<span class="sourceLineNo">275</span>        public void setAbs(final int index, final Complex val) {<a name="line.275"></a>
<span class="sourceLineNo">276</span>                setAbs(index, (float) val.getReal(), (float) val.getImaginary()); // PRIM_TYPE<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>        @Override<a name="line.279"></a>
<span class="sourceLineNo">280</span>        public void setObjectAbs(final int index, final Object obj) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                setAbs(index, (float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)); // PRIM_TYPE<a name="line.281"></a>
<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
<span class="sourceLineNo">283</span><a name="line.283"></a>
<span class="sourceLineNo">284</span>        /**<a name="line.284"></a>
<span class="sourceLineNo">285</span>         * Set item at index to complex value given by real and imaginary parts<a name="line.285"></a>
<span class="sourceLineNo">286</span>         * @param index absolute index<a name="line.286"></a>
<span class="sourceLineNo">287</span>         * @param real<a name="line.287"></a>
<span class="sourceLineNo">288</span>         * @param imag<a name="line.288"></a>
<span class="sourceLineNo">289</span>         */<a name="line.289"></a>
<span class="sourceLineNo">290</span>        public void setAbs(final int index, final float real, final float imag) { // PRIM_TYPE<a name="line.290"></a>
<span class="sourceLineNo">291</span>                setDirty();<a name="line.291"></a>
<span class="sourceLineNo">292</span>                data[index] = real;<a name="line.292"></a>
<span class="sourceLineNo">293</span>                data[index+1] = imag;<a name="line.293"></a>
<span class="sourceLineNo">294</span>        }<a name="line.294"></a>
<span class="sourceLineNo">295</span><a name="line.295"></a>
<span class="sourceLineNo">296</span>        /**<a name="line.296"></a>
<span class="sourceLineNo">297</span>         * @return item in first position<a name="line.297"></a>
<span class="sourceLineNo">298</span>         * @since 2.0<a name="line.298"></a>
<span class="sourceLineNo">299</span>         */<a name="line.299"></a>
<span class="sourceLineNo">300</span>        public Complex get() {<a name="line.300"></a>
<span class="sourceLineNo">301</span>                int n = getFirst1DIndex();<a name="line.301"></a>
<span class="sourceLineNo">302</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.302"></a>
<span class="sourceLineNo">303</span>                return z;<a name="line.303"></a>
<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>        /**<a name="line.306"></a>
<span class="sourceLineNo">307</span>         * @param i<a name="line.307"></a>
<span class="sourceLineNo">308</span>         * @return item in given position<a name="line.308"></a>
<span class="sourceLineNo">309</span>         */<a name="line.309"></a>
<span class="sourceLineNo">310</span>        public Complex get(final int i) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>                int n = get1DIndex(i);<a name="line.311"></a>
<span class="sourceLineNo">312</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.312"></a>
<span class="sourceLineNo">313</span>                return z;<a name="line.313"></a>
<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>        /**<a name="line.316"></a>
<span class="sourceLineNo">317</span>         * @param i<a name="line.317"></a>
<span class="sourceLineNo">318</span>         * @param j<a name="line.318"></a>
<span class="sourceLineNo">319</span>         * @return item in given position<a name="line.319"></a>
<span class="sourceLineNo">320</span>         */<a name="line.320"></a>
<span class="sourceLineNo">321</span>        public Complex get(final int i, final int j) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                int n = get1DIndex(i, j);<a name="line.322"></a>
<span class="sourceLineNo">323</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.323"></a>
<span class="sourceLineNo">324</span>                return z;<a name="line.324"></a>
<span class="sourceLineNo">325</span>        }<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>         * @param pos<a name="line.328"></a>
<span class="sourceLineNo">329</span>         * @return item in given position<a name="line.329"></a>
<span class="sourceLineNo">330</span>         */<a name="line.330"></a>
<span class="sourceLineNo">331</span>        public Complex get(final int... pos) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>                int n = get1DIndex(pos);<a name="line.332"></a>
<span class="sourceLineNo">333</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.333"></a>
<span class="sourceLineNo">334</span>                return z;<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>        @Override<a name="line.337"></a>
<span class="sourceLineNo">338</span>        public Object getObject() {<a name="line.338"></a>
<span class="sourceLineNo">339</span>                return get();<a name="line.339"></a>
<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
<span class="sourceLineNo">341</span><a name="line.341"></a>
<span class="sourceLineNo">342</span>        @Override<a name="line.342"></a>
<span class="sourceLineNo">343</span>        public Object getObject(final int i) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>                return get(i);<a name="line.344"></a>
<span class="sourceLineNo">345</span>        }<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>        @Override<a name="line.347"></a>
<span class="sourceLineNo">348</span>        public Object getObject(final int i, final int j) {<a name="line.348"></a>
<span class="sourceLineNo">349</span>                return get(i, j);<a name="line.349"></a>
<span class="sourceLineNo">350</span>        }<a name="line.350"></a>
<span class="sourceLineNo">351</span><a name="line.351"></a>
<span class="sourceLineNo">352</span>        @Override<a name="line.352"></a>
<span class="sourceLineNo">353</span>        public Object getObject(final int... pos) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                return getComplex(pos);<a name="line.354"></a>
<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
<span class="sourceLineNo">357</span>        /**<a name="line.357"></a>
<span class="sourceLineNo">358</span>         * @return item in first position<a name="line.358"></a>
<span class="sourceLineNo">359</span>         * @since 2.0<a name="line.359"></a>
<span class="sourceLineNo">360</span>         */<a name="line.360"></a>
<span class="sourceLineNo">361</span>        public float getReal() { // PRIM_TYPE<a name="line.361"></a>
<span class="sourceLineNo">362</span>                return (float) getFirstValue(); // PRIM_TYPE<a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<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>         * @param i<a name="line.366"></a>
<span class="sourceLineNo">367</span>         * @return item in given position<a name="line.367"></a>
<span class="sourceLineNo">368</span>         */<a name="line.368"></a>
<span class="sourceLineNo">369</span>        public float getReal(final int i) { // PRIM_TYPE<a name="line.369"></a>
<span class="sourceLineNo">370</span>                return (float) getFirstValue(i); // PRIM_TYPE<a name="line.370"></a>
<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>        /**<a name="line.373"></a>
<span class="sourceLineNo">374</span>         * @param i<a name="line.374"></a>
<span class="sourceLineNo">375</span>         * @param j<a name="line.375"></a>
<span class="sourceLineNo">376</span>         * @return item in given position<a name="line.376"></a>
<span class="sourceLineNo">377</span>         */<a name="line.377"></a>
<span class="sourceLineNo">378</span>        public float getReal(final int i, final int j) { // PRIM_TYPE<a name="line.378"></a>
<span class="sourceLineNo">379</span>                return (float) getFirstValue(i, j); // PRIM_TYPE<a name="line.379"></a>
<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>        /**<a name="line.382"></a>
<span class="sourceLineNo">383</span>         * @param pos<a name="line.383"></a>
<span class="sourceLineNo">384</span>         * @return item in given position<a name="line.384"></a>
<span class="sourceLineNo">385</span>         */<a name="line.385"></a>
<span class="sourceLineNo">386</span>        public float getReal(final int... pos) { // PRIM_TYPE<a name="line.386"></a>
<span class="sourceLineNo">387</span>                return (float) getFirstValue(pos); // PRIM_TYPE<a name="line.387"></a>
<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>        /**<a name="line.390"></a>
<span class="sourceLineNo">391</span>         * @return item in first position<a name="line.391"></a>
<span class="sourceLineNo">392</span>         * @since 2.0<a name="line.392"></a>
<span class="sourceLineNo">393</span>         */<a name="line.393"></a>
<span class="sourceLineNo">394</span>        public float getImag() { // PRIM_TYPE<a name="line.394"></a>
<span class="sourceLineNo">395</span>                return data[getFirst1DIndex() + 1];<a name="line.395"></a>
<span class="sourceLineNo">396</span>        }<a name="line.396"></a>
<span class="sourceLineNo">397</span><a name="line.397"></a>
<span class="sourceLineNo">398</span>        /**<a name="line.398"></a>
<span class="sourceLineNo">399</span>         * @param i<a name="line.399"></a>
<span class="sourceLineNo">400</span>         * @return item in given position<a name="line.400"></a>
<span class="sourceLineNo">401</span>         */<a name="line.401"></a>
<span class="sourceLineNo">402</span>        public float getImag(final int i) { // PRIM_TYPE<a name="line.402"></a>
<span class="sourceLineNo">403</span>                return data[get1DIndex(i) + 1];<a name="line.403"></a>
<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
<span class="sourceLineNo">405</span><a name="line.405"></a>
<span class="sourceLineNo">406</span>        /**<a name="line.406"></a>
<span class="sourceLineNo">407</span>         * @param i<a name="line.407"></a>
<span class="sourceLineNo">408</span>         * @param j<a name="line.408"></a>
<span class="sourceLineNo">409</span>         * @return item in given position<a name="line.409"></a>
<span class="sourceLineNo">410</span>         */<a name="line.410"></a>
<span class="sourceLineNo">411</span>        public float getImag(final int i, final int j) { // PRIM_TYPE<a name="line.411"></a>
<span class="sourceLineNo">412</span>                return data[get1DIndex(i, j) + 1];<a name="line.412"></a>
<span class="sourceLineNo">413</span>        }<a name="line.413"></a>
<span class="sourceLineNo">414</span><a name="line.414"></a>
<span class="sourceLineNo">415</span>        /**<a name="line.415"></a>
<span class="sourceLineNo">416</span>         * @param pos<a name="line.416"></a>
<span class="sourceLineNo">417</span>         * @return item in given position<a name="line.417"></a>
<span class="sourceLineNo">418</span>         */<a name="line.418"></a>
<span class="sourceLineNo">419</span>        public float getImag(final int... pos) { // PRIM_TYPE<a name="line.419"></a>
<span class="sourceLineNo">420</span>                return data[get1DIndex(pos) + 1];<a name="line.420"></a>
<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>        /**<a name="line.423"></a>
<span class="sourceLineNo">424</span>         * @return item in first position<a name="line.424"></a>
<span class="sourceLineNo">425</span>         * @since 2.0<a name="line.425"></a>
<span class="sourceLineNo">426</span>         */<a name="line.426"></a>
<span class="sourceLineNo">427</span>        public Complex getComplex() {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                return get();<a name="line.428"></a>
<span class="sourceLineNo">429</span>        }<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>         * @param i<a name="line.432"></a>
<span class="sourceLineNo">433</span>         * @return item in given position<a name="line.433"></a>
<span class="sourceLineNo">434</span>         */<a name="line.434"></a>
<span class="sourceLineNo">435</span>        public Complex getComplex(final int i) {<a name="line.435"></a>
<span class="sourceLineNo">436</span>                return get(i);<a name="line.436"></a>
<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>        /**<a name="line.439"></a>
<span class="sourceLineNo">440</span>         * @param i<a name="line.440"></a>
<span class="sourceLineNo">441</span>         * @param j<a name="line.441"></a>
<span class="sourceLineNo">442</span>         * @return item in given position<a name="line.442"></a>
<span class="sourceLineNo">443</span>         */<a name="line.443"></a>
<span class="sourceLineNo">444</span>        public Complex getComplex(final int i, final int j) {<a name="line.444"></a>
<span class="sourceLineNo">445</span>                return get(i, j);<a name="line.445"></a>
<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>        /**<a name="line.448"></a>
<span class="sourceLineNo">449</span>         * @param pos<a name="line.449"></a>
<span class="sourceLineNo">450</span>         * @return item in given position<a name="line.450"></a>
<span class="sourceLineNo">451</span>         */<a name="line.451"></a>
<span class="sourceLineNo">452</span>        public Complex getComplex(final int... pos) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>                return get(pos);<a name="line.453"></a>
<span class="sourceLineNo">454</span>        }<a name="line.454"></a>
<span class="sourceLineNo">455</span><a name="line.455"></a>
<span class="sourceLineNo">456</span>        @Override<a name="line.456"></a>
<span class="sourceLineNo">457</span>        public void set(final Object obj, final int i) {<a name="line.457"></a>
<span class="sourceLineNo">458</span>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, i); // PRIM_TYPE<a name="line.458"></a>
<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
<span class="sourceLineNo">460</span><a name="line.460"></a>
<span class="sourceLineNo">461</span>        @Override<a name="line.461"></a>
<span class="sourceLineNo">462</span>        public void set(final Object obj, final int i, final int j) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, i, j); // PRIM_TYPE<a name="line.463"></a>
<span class="sourceLineNo">464</span>        }<a name="line.464"></a>
<span class="sourceLineNo">465</span><a name="line.465"></a>
<span class="sourceLineNo">466</span>        @Override<a name="line.466"></a>
<span class="sourceLineNo">467</span>        public void set(final Object obj, int... pos) {<a name="line.467"></a>
<span class="sourceLineNo">468</span>                if (pos == null || (pos.length == 0 &amp;&amp; shape.length &gt; 0)) {<a name="line.468"></a>
<span class="sourceLineNo">469</span>                        pos = new int[shape.length];<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>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, pos); // PRIM_TYPE<a name="line.472"></a>
<span class="sourceLineNo">473</span>        }<a name="line.473"></a>
<span class="sourceLineNo">474</span><a name="line.474"></a>
<span class="sourceLineNo">475</span>        /**<a name="line.475"></a>
<span class="sourceLineNo">476</span>         * Set real and imaginary values at given position<a name="line.476"></a>
<span class="sourceLineNo">477</span>         * @param dr<a name="line.477"></a>
<span class="sourceLineNo">478</span>         * @param di<a name="line.478"></a>
<span class="sourceLineNo">479</span>         * @param i<a name="line.479"></a>
<span class="sourceLineNo">480</span>         */<a name="line.480"></a>
<span class="sourceLineNo">481</span>        public void set(final float dr, final float di, final int i) { // PRIM_TYPE<a name="line.481"></a>
<span class="sourceLineNo">482</span>                setItem(new float[] {dr, di}, i); // PRIM_TYPE<a name="line.482"></a>
<span class="sourceLineNo">483</span>        }<a name="line.483"></a>
<span class="sourceLineNo">484</span><a name="line.484"></a>
<span class="sourceLineNo">485</span>        /**<a name="line.485"></a>
<span class="sourceLineNo">486</span>         * Set real and imaginary values at given position<a name="line.486"></a>
<span class="sourceLineNo">487</span>         * @param dr<a name="line.487"></a>
<span class="sourceLineNo">488</span>         * @param di<a name="line.488"></a>
<span class="sourceLineNo">489</span>         * @param i<a name="line.489"></a>
<span class="sourceLineNo">490</span>         * @param j<a name="line.490"></a>
<span class="sourceLineNo">491</span>         */<a name="line.491"></a>
<span class="sourceLineNo">492</span>        public void set(final float dr, final float di, final int i, final int j) { // PRIM_TYPE<a name="line.492"></a>
<span class="sourceLineNo">493</span>                setItem(new float[] {dr, di}, i, j); // PRIM_TYPE<a name="line.493"></a>
<span class="sourceLineNo">494</span>        }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>        /**<a name="line.496"></a>
<span class="sourceLineNo">497</span>         * Set real and imaginary values at given position<a name="line.497"></a>
<span class="sourceLineNo">498</span>         * @param dr<a name="line.498"></a>
<span class="sourceLineNo">499</span>         * @param di<a name="line.499"></a>
<span class="sourceLineNo">500</span>         * @param pos<a name="line.500"></a>
<span class="sourceLineNo">501</span>         * @since 2.0<a name="line.501"></a>
<span class="sourceLineNo">502</span>         */<a name="line.502"></a>
<span class="sourceLineNo">503</span>        public void set(final float dr, final float di, final int... pos) { // PRIM_TYPE<a name="line.503"></a>
<span class="sourceLineNo">504</span>                setItem(new float[] {dr, di}, pos); // PRIM_TYPE<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>        /**<a name="line.507"></a>
<span class="sourceLineNo">508</span>         * @since 2.0<a name="line.508"></a>
<span class="sourceLineNo">509</span>         */<a name="line.509"></a>
<span class="sourceLineNo">510</span>        @Override<a name="line.510"></a>
<span class="sourceLineNo">511</span>        public FloatDataset getRealPart() { // CLASS_TYPE<a name="line.511"></a>
<span class="sourceLineNo">512</span>                return getElements(0);<a name="line.512"></a>
<span class="sourceLineNo">513</span>        }<a name="line.513"></a>
<span class="sourceLineNo">514</span><a name="line.514"></a>
<span class="sourceLineNo">515</span>        /**<a name="line.515"></a>
<span class="sourceLineNo">516</span>         * @since 2.0<a name="line.516"></a>
<span class="sourceLineNo">517</span>         */<a name="line.517"></a>
<span class="sourceLineNo">518</span>        @Override<a name="line.518"></a>
<span class="sourceLineNo">519</span>        public FloatDataset getRealView() { // CLASS_TYPE<a name="line.519"></a>
<span class="sourceLineNo">520</span>                return getElementsView(0);<a name="line.520"></a>
<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>        /**<a name="line.523"></a>
<span class="sourceLineNo">524</span>         * @return imaginary part of dataset as new dataset<a name="line.524"></a>
<span class="sourceLineNo">525</span>         * @since 2.0<a name="line.525"></a>
<span class="sourceLineNo">526</span>         */<a name="line.526"></a>
<span class="sourceLineNo">527</span>        public FloatDataset getImaginaryPart() { // CLASS_TYPE<a name="line.527"></a>
<span class="sourceLineNo">528</span>                return getElements(1);<a name="line.528"></a>
<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>        /**<a name="line.531"></a>
<span class="sourceLineNo">532</span>         * @return view of imaginary values<a name="line.532"></a>
<span class="sourceLineNo">533</span>         */<a name="line.533"></a>
<span class="sourceLineNo">534</span>        public FloatDataset getImaginaryView() { // CLASS_TYPE<a name="line.534"></a>
<span class="sourceLineNo">535</span>                return getElementsView(1);<a name="line.535"></a>
<span class="sourceLineNo">536</span>        }<a name="line.536"></a>
<span class="sourceLineNo">537</span><a name="line.537"></a>
<span class="sourceLineNo">538</span>        @Override<a name="line.538"></a>
<span class="sourceLineNo">539</span>        public Number max(boolean... switches) {<a name="line.539"></a>
<span class="sourceLineNo">540</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.540"></a>
<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>        @Override<a name="line.543"></a>
<span class="sourceLineNo">544</span>        public Number min(boolean... switches) {<a name="line.544"></a>
<span class="sourceLineNo">545</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.545"></a>
<span class="sourceLineNo">546</span>        }<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>        @Override<a name="line.548"></a>
<span class="sourceLineNo">549</span>        public Object sum(boolean... switches) { // FIXME<a name="line.549"></a>
<span class="sourceLineNo">550</span>                double[] sum = (double[]) super.sum(switches);<a name="line.550"></a>
<span class="sourceLineNo">551</span>                return new Complex(sum[0], sum[1]);<a name="line.551"></a>
<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
<span class="sourceLineNo">553</span><a name="line.553"></a>
<span class="sourceLineNo">554</span>        @Override<a name="line.554"></a>
<span class="sourceLineNo">555</span>        public Object mean(boolean... switches) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>                double[] mean = (double[]) super.mean(switches);<a name="line.556"></a>
<span class="sourceLineNo">557</span>                return new Complex(mean[0], mean[1]);<a name="line.557"></a>
<span class="sourceLineNo">558</span>        }<a name="line.558"></a>
<span class="sourceLineNo">559</span><a name="line.559"></a>
<span class="sourceLineNo">560</span>        @Override<a name="line.560"></a>
<span class="sourceLineNo">561</span>        public int[] maxPos(boolean... switches) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.562"></a>
<span class="sourceLineNo">563</span>        }<a name="line.563"></a>
<span class="sourceLineNo">564</span><a name="line.564"></a>
<span class="sourceLineNo">565</span>        @Override<a name="line.565"></a>
<span class="sourceLineNo">566</span>        public int[] minPos(boolean... switches) {<a name="line.566"></a>
<span class="sourceLineNo">567</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.567"></a>
<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
<span class="sourceLineNo">569</span><a name="line.569"></a>
<span class="sourceLineNo">570</span>        @Override<a name="line.570"></a>
<span class="sourceLineNo">571</span>        public ComplexFloatDataset getSlice(final SliceIterator siter) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>                ComplexFloatDataset result = new ComplexFloatDataset(siter.getShape());<a name="line.572"></a>
<span class="sourceLineNo">573</span>                float[] rdata = result.data; // PRIM_TYPE<a name="line.573"></a>
<span class="sourceLineNo">574</span>                IndexIterator riter = result.getIterator();<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>                while (siter.hasNext() &amp;&amp; riter.hasNext()) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        rdata[riter.index] = data[siter.index];<a name="line.577"></a>
<span class="sourceLineNo">578</span>                        rdata[riter.index+1] = data[siter.index+1];<a name="line.578"></a>
<span class="sourceLineNo">579</span>                }<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>                result.setName(name + BLOCK_OPEN + Slice.createString(siter.shape, siter.start, siter.stop, siter.step) + BLOCK_CLOSE);<a name="line.581"></a>
<span class="sourceLineNo">582</span>                return result;<a name="line.582"></a>
<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>        @Override<a name="line.585"></a>
<span class="sourceLineNo">586</span>        ComplexFloatDataset setSlicedView(Dataset view, Dataset d) {<a name="line.586"></a>
<span class="sourceLineNo">587</span>                setDirty();<a name="line.587"></a>
<span class="sourceLineNo">588</span>                final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(view, d);<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>                if (d instanceof ComplexFloatDataset || d instanceof ComplexFloatDataset) {<a name="line.590"></a>
<span class="sourceLineNo">591</span>                        while (it.hasNext()) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>                                data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.592"></a>
<span class="sourceLineNo">593</span>                                data[it.aIndex + 1] = (float) d.getElementDoubleAbs(it.bIndex + 1); // GET_ELEMENT_WITH_CAST<a name="line.593"></a>
<span class="sourceLineNo">594</span>                        }<a name="line.594"></a>
<span class="sourceLineNo">595</span>                } else {<a name="line.595"></a>
<span class="sourceLineNo">596</span>                        while (it.hasNext()) {<a name="line.596"></a>
<span class="sourceLineNo">597</span>                                data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.597"></a>
<span class="sourceLineNo">598</span>                                data[it.aIndex + 1] = 0;<a name="line.598"></a>
<span class="sourceLineNo">599</span>                        }<a name="line.599"></a>
<span class="sourceLineNo">600</span>                }<a name="line.600"></a>
<span class="sourceLineNo">601</span>                return this;<a name="line.601"></a>
<span class="sourceLineNo">602</span>        }<a name="line.602"></a>
<span class="sourceLineNo">603</span><a name="line.603"></a>
<span class="sourceLineNo">604</span>        @Override<a name="line.604"></a>
<span class="sourceLineNo">605</span>        public ComplexFloatDataset setSlice(final Object o, final IndexIterator siter) {<a name="line.605"></a>
<span class="sourceLineNo">606</span>                setDirty();<a name="line.606"></a>
<span class="sourceLineNo">607</span>                if (o instanceof ComplexFloatDataset) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>                        ComplexFloatDataset zds = (ComplexFloatDataset) o;<a name="line.608"></a>
<span class="sourceLineNo">609</span><a name="line.609"></a>
<span class="sourceLineNo">610</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), zds.shape)) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>                                throw new IllegalArgumentException(String.format(<a name="line.611"></a>
<span class="sourceLineNo">612</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(zds.shape),<a name="line.612"></a>
<span class="sourceLineNo">613</span>                                                Arrays.toString(siter.getShape())));<a name="line.613"></a>
<span class="sourceLineNo">614</span>                        }<a name="line.614"></a>
<span class="sourceLineNo">615</span><a name="line.615"></a>
<span class="sourceLineNo">616</span>                        IndexIterator oiter = zds.getIterator();<a name="line.616"></a>
<span class="sourceLineNo">617</span>                        float[] odata = zds.data;<a name="line.617"></a>
<span class="sourceLineNo">618</span><a name="line.618"></a>
<span class="sourceLineNo">619</span>                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.619"></a>
<span class="sourceLineNo">620</span>                                data[siter.index] = odata[oiter.index];<a name="line.620"></a>
<span class="sourceLineNo">621</span>                                data[siter.index+1] = odata[oiter.index+1];<a name="line.621"></a>
<span class="sourceLineNo">622</span>                        }<a name="line.622"></a>
<span class="sourceLineNo">623</span>                } else if (o instanceof ComplexDoubleDataset) { // IGNORE_CLASS<a name="line.623"></a>
<span class="sourceLineNo">624</span>                        ComplexDoubleDataset zds = (ComplexDoubleDataset) o; // IGNORE_CLASS<a name="line.624"></a>
<span class="sourceLineNo">625</span><a name="line.625"></a>
<span class="sourceLineNo">626</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), zds.shape)) {<a name="line.626"></a>
<span class="sourceLineNo">627</span>                                throw new IllegalArgumentException(String.format(<a name="line.627"></a>
<span class="sourceLineNo">628</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(zds.shape),<a name="line.628"></a>
<span class="sourceLineNo">629</span>                                                Arrays.toString(siter.getShape())));<a name="line.629"></a>
<span class="sourceLineNo">630</span>                        }<a name="line.630"></a>
<span class="sourceLineNo">631</span><a name="line.631"></a>
<span class="sourceLineNo">632</span>                        IndexIterator oiter = zds.getIterator();<a name="line.632"></a>
<span class="sourceLineNo">633</span>                        double[] odata = zds.data;<a name="line.633"></a>
<span class="sourceLineNo">634</span><a name="line.634"></a>
<span class="sourceLineNo">635</span>                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.635"></a>
<span class="sourceLineNo">636</span>                                data[siter.index] = (float) odata[oiter.index]; // PRIM_TYPE // ADD_CAST<a name="line.636"></a>
<span class="sourceLineNo">637</span>                                data[siter.index+1] = (float) odata[oiter.index+1]; // PRIM_TYPE // ADD_CAST<a name="line.637"></a>
<span class="sourceLineNo">638</span>                        }<a name="line.638"></a>
<span class="sourceLineNo">639</span>                } else if (o instanceof IDataset) {<a name="line.639"></a>
<span class="sourceLineNo">640</span>                        super.setSlice(o, siter);<a name="line.640"></a>
<span class="sourceLineNo">641</span>                } else {<a name="line.641"></a>
<span class="sourceLineNo">642</span>                        try {<a name="line.642"></a>
<span class="sourceLineNo">643</span>                                float vr = (float) DTypeUtils.toReal(o); // PRIM_TYPE // ADD_CAST<a name="line.643"></a>
<span class="sourceLineNo">644</span>                                float vi = (float) DTypeUtils.toImag(o); // PRIM_TYPE // ADD_CAST<a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>                                while (siter.hasNext()) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>                                        data[siter.index]     = vr;<a name="line.647"></a>
<span class="sourceLineNo">648</span>                                        data[siter.index + 1] = vi;<a name="line.648"></a>
<span class="sourceLineNo">649</span>                                }<a name="line.649"></a>
<span class="sourceLineNo">650</span>                        } catch (IllegalArgumentException e) {<a name="line.650"></a>
<span class="sourceLineNo">651</span>                                throw new IllegalArgumentException("Object for setting slice is not a dataset or number");<a name="line.651"></a>
<span class="sourceLineNo">652</span>                        }<a name="line.652"></a>
<span class="sourceLineNo">653</span>                }<a name="line.653"></a>
<span class="sourceLineNo">654</span>                return this;<a name="line.654"></a>
<span class="sourceLineNo">655</span>        }<a name="line.655"></a>
<span class="sourceLineNo">656</span><a name="line.656"></a>
<span class="sourceLineNo">657</span>        @Override<a name="line.657"></a>
<span class="sourceLineNo">658</span>        public ComplexFloatDataset iadd(final Object b) {<a name="line.658"></a>
<span class="sourceLineNo">659</span>                setDirty();<a name="line.659"></a>
<span class="sourceLineNo">660</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.660"></a>
<span class="sourceLineNo">661</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.661"></a>
<span class="sourceLineNo">662</span>                if (bds.getSize() == 1) {<a name="line.662"></a>
<span class="sourceLineNo">663</span>                        final IndexIterator it = getIterator();<a name="line.663"></a>
<span class="sourceLineNo">664</span>                        final int bOffset = bds.getOffset();<a name="line.664"></a>
<span class="sourceLineNo">665</span>                        if (useLong) { // note no complex longs<a name="line.665"></a>
<span class="sourceLineNo">666</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.666"></a>
<span class="sourceLineNo">667</span>                                while (it.hasNext()) {<a name="line.667"></a>
<span class="sourceLineNo">668</span>                                        data[it.index] += lb;<a name="line.668"></a>
<span class="sourceLineNo">669</span>                                }<a name="line.669"></a>
<span class="sourceLineNo">670</span>                        } else {<a name="line.670"></a>
<span class="sourceLineNo">671</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.671"></a>
<span class="sourceLineNo">672</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.672"></a>
<span class="sourceLineNo">673</span>                                        while (it.hasNext()) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                                                data[it.index] += db;<a name="line.674"></a>
<span class="sourceLineNo">675</span>                                        }<a name="line.675"></a>
<span class="sourceLineNo">676</span>                                } else {<a name="line.676"></a>
<span class="sourceLineNo">677</span>                                        final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.677"></a>
<span class="sourceLineNo">678</span>                                        while (it.hasNext()) {<a name="line.678"></a>
<span class="sourceLineNo">679</span>                                                data[it.index]     += db;<a name="line.679"></a>
<span class="sourceLineNo">680</span>                                                data[it.index + 1] += vi;<a name="line.680"></a>
<span class="sourceLineNo">681</span>                                        }<a name="line.681"></a>
<span class="sourceLineNo">682</span>                                }<a name="line.682"></a>
<span class="sourceLineNo">683</span>                        }<a name="line.683"></a>
<span class="sourceLineNo">684</span>                } else {<a name="line.684"></a>
<span class="sourceLineNo">685</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.685"></a>
<span class="sourceLineNo">686</span>                        it.setOutputDouble(!useLong);<a name="line.686"></a>
<span class="sourceLineNo">687</span>                        if (useLong) { // note no complex longs<a name="line.687"></a>
<span class="sourceLineNo">688</span>                                while (it.hasNext()) {<a name="line.688"></a>
<span class="sourceLineNo">689</span>                                        data[it.aIndex] += it.bLong;<a name="line.689"></a>
<span class="sourceLineNo">690</span>                                }<a name="line.690"></a>
<span class="sourceLineNo">691</span>                        } else {<a name="line.691"></a>
<span class="sourceLineNo">692</span>                                if (bds.isComplex()) {<a name="line.692"></a>
<span class="sourceLineNo">693</span>                                        while (it.hasNext()) {<a name="line.693"></a>
<span class="sourceLineNo">694</span>                                                data[it.aIndex]     += it.bDouble;<a name="line.694"></a>
<span class="sourceLineNo">695</span>                                                data[it.aIndex + 1] += bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.695"></a>
<span class="sourceLineNo">696</span>                                        }<a name="line.696"></a>
<span class="sourceLineNo">697</span>                                } else {<a name="line.697"></a>
<span class="sourceLineNo">698</span>                                        while (it.hasNext()) {<a name="line.698"></a>
<span class="sourceLineNo">699</span>                                                data[it.aIndex] += it.bDouble;<a name="line.699"></a>
<span class="sourceLineNo">700</span>                                        }<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                }<a name="line.701"></a>
<span class="sourceLineNo">702</span>                        }<a name="line.702"></a>
<span class="sourceLineNo">703</span>                }<a name="line.703"></a>
<span class="sourceLineNo">704</span>                return this;<a name="line.704"></a>
<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
<span class="sourceLineNo">706</span><a name="line.706"></a>
<span class="sourceLineNo">707</span>        @Override<a name="line.707"></a>
<span class="sourceLineNo">708</span>        public ComplexFloatDataset isubtract(final Object b) {<a name="line.708"></a>
<span class="sourceLineNo">709</span>                setDirty();<a name="line.709"></a>
<span class="sourceLineNo">710</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.710"></a>
<span class="sourceLineNo">711</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.711"></a>
<span class="sourceLineNo">712</span>                if (bds.getSize() == 1) {<a name="line.712"></a>
<span class="sourceLineNo">713</span>                        final IndexIterator it = getIterator();<a name="line.713"></a>
<span class="sourceLineNo">714</span>                        final int bOffset = bds.getOffset();<a name="line.714"></a>
<span class="sourceLineNo">715</span>                        if (useLong) { // note no complex longs<a name="line.715"></a>
<span class="sourceLineNo">716</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.716"></a>
<span class="sourceLineNo">717</span>                                while (it.hasNext()) {<a name="line.717"></a>
<span class="sourceLineNo">718</span>                                        data[it.index] -= lb;<a name="line.718"></a>
<span class="sourceLineNo">719</span>                                }<a name="line.719"></a>
<span class="sourceLineNo">720</span>                        } else {<a name="line.720"></a>
<span class="sourceLineNo">721</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.721"></a>
<span class="sourceLineNo">722</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.722"></a>
<span class="sourceLineNo">723</span>                                        while (it.hasNext()) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>                                                data[it.index] -= db;<a name="line.724"></a>
<span class="sourceLineNo">725</span>                                        }<a name="line.725"></a>
<span class="sourceLineNo">726</span>                                } else {<a name="line.726"></a>
<span class="sourceLineNo">727</span>                                        final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.727"></a>
<span class="sourceLineNo">728</span>                                        while (it.hasNext()) {<a name="line.728"></a>
<span class="sourceLineNo">729</span>                                                data[it.index]     -= db;<a name="line.729"></a>
<span class="sourceLineNo">730</span>                                                data[it.index + 1] -= vi;<a name="line.730"></a>
<span class="sourceLineNo">731</span>                                        }<a name="line.731"></a>
<span class="sourceLineNo">732</span>                                }<a name="line.732"></a>
<span class="sourceLineNo">733</span>                        }<a name="line.733"></a>
<span class="sourceLineNo">734</span>                } else {<a name="line.734"></a>
<span class="sourceLineNo">735</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.735"></a>
<span class="sourceLineNo">736</span>                        it.setOutputDouble(!useLong);<a name="line.736"></a>
<span class="sourceLineNo">737</span>                        if (useLong) { // note no complex longs<a name="line.737"></a>
<span class="sourceLineNo">738</span>                                while (it.hasNext()) {<a name="line.738"></a>
<span class="sourceLineNo">739</span>                                        data[it.aIndex] -= it.bLong;<a name="line.739"></a>
<span class="sourceLineNo">740</span>                                }<a name="line.740"></a>
<span class="sourceLineNo">741</span>                        } else {<a name="line.741"></a>
<span class="sourceLineNo">742</span>                                if (bds.isComplex()) {<a name="line.742"></a>
<span class="sourceLineNo">743</span>                                        while (it.hasNext()) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>                                                data[it.aIndex]     -= it.bDouble;<a name="line.744"></a>
<span class="sourceLineNo">745</span>                                                data[it.aIndex + 1] -= bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.745"></a>
<span class="sourceLineNo">746</span>                                        }<a name="line.746"></a>
<span class="sourceLineNo">747</span>                                } else {<a name="line.747"></a>
<span class="sourceLineNo">748</span>                                        while (it.hasNext()) {<a name="line.748"></a>
<span class="sourceLineNo">749</span>                                                data[it.aIndex] -= it.bDouble;<a name="line.749"></a>
<span class="sourceLineNo">750</span>                                        }<a name="line.750"></a>
<span class="sourceLineNo">751</span>                                }<a name="line.751"></a>
<span class="sourceLineNo">752</span>                        }<a name="line.752"></a>
<span class="sourceLineNo">753</span>                }<a name="line.753"></a>
<span class="sourceLineNo">754</span>                return this;<a name="line.754"></a>
<span class="sourceLineNo">755</span>        }<a name="line.755"></a>
<span class="sourceLineNo">756</span><a name="line.756"></a>
<span class="sourceLineNo">757</span>        @Override<a name="line.757"></a>
<span class="sourceLineNo">758</span>        public ComplexFloatDataset imultiply(final Object b) {<a name="line.758"></a>
<span class="sourceLineNo">759</span>                setDirty();<a name="line.759"></a>
<span class="sourceLineNo">760</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.760"></a>
<span class="sourceLineNo">761</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.761"></a>
<span class="sourceLineNo">762</span>                if (bds.getSize() == 1) {<a name="line.762"></a>
<span class="sourceLineNo">763</span>                        final IndexIterator it = getIterator();<a name="line.763"></a>
<span class="sourceLineNo">764</span>                        final int bOffset = bds.getOffset();<a name="line.764"></a>
<span class="sourceLineNo">765</span>                        if (useLong) { // note no complex longs<a name="line.765"></a>
<span class="sourceLineNo">766</span>                                final long r2 = bds.getElementLongAbs(bOffset);<a name="line.766"></a>
<span class="sourceLineNo">767</span>                                while (it.hasNext()) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>                                        data[it.index]     *= r2;<a name="line.768"></a>
<span class="sourceLineNo">769</span>                                        data[it.index + 1] *= r2;<a name="line.769"></a>
<span class="sourceLineNo">770</span>                                }<a name="line.770"></a>
<span class="sourceLineNo">771</span>                        } else {<a name="line.771"></a>
<span class="sourceLineNo">772</span>                                final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.772"></a>
<span class="sourceLineNo">773</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.773"></a>
<span class="sourceLineNo">774</span>                                        while (it.hasNext()) {<a name="line.774"></a>
<span class="sourceLineNo">775</span>                                                data[it.index]     *= r2;<a name="line.775"></a>
<span class="sourceLineNo">776</span>                                                data[it.index + 1] *= r2;<a name="line.776"></a>
<span class="sourceLineNo">777</span>                                        }<a name="line.777"></a>
<span class="sourceLineNo">778</span>                                } else {<a name="line.778"></a>
<span class="sourceLineNo">779</span>                                        final double i2 = bds.getElementDoubleAbs(bOffset + 1);<a name="line.779"></a>
<span class="sourceLineNo">780</span>                                        while (it.hasNext()) {<a name="line.780"></a>
<span class="sourceLineNo">781</span>                                                double r1 = data[it.index];<a name="line.781"></a>
<span class="sourceLineNo">782</span>                                                double i1 = data[it.index + 1];<a name="line.782"></a>
<span class="sourceLineNo">783</span>                                                data[it.index]     = (float) (r1*r2 - i1*i2); // ADD_CAST<a name="line.783"></a>
<span class="sourceLineNo">784</span>                                                data[it.index + 1] = (float) (r1*i2 + i1*r2); // ADD_CAST<a name="line.784"></a>
<span class="sourceLineNo">785</span>                                        }<a name="line.785"></a>
<span class="sourceLineNo">786</span>                                }<a name="line.786"></a>
<span class="sourceLineNo">787</span>                        }<a name="line.787"></a>
<span class="sourceLineNo">788</span>                } else {<a name="line.788"></a>
<span class="sourceLineNo">789</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.789"></a>
<span class="sourceLineNo">790</span>                        it.setOutputDouble(!useLong);<a name="line.790"></a>
<span class="sourceLineNo">791</span>                        if (useLong) { // note no complex longs<a name="line.791"></a>
<span class="sourceLineNo">792</span>                                while (it.hasNext()) {<a name="line.792"></a>
<span class="sourceLineNo">793</span>                                        data[it.aIndex]     *= it.bDouble;<a name="line.793"></a>
<span class="sourceLineNo">794</span>                                        data[it.aIndex + 1] *= it.bDouble;<a name="line.794"></a>
<span class="sourceLineNo">795</span>                                }<a name="line.795"></a>
<span class="sourceLineNo">796</span>                        } else {<a name="line.796"></a>
<span class="sourceLineNo">797</span>                                if (bds.isComplex()) {<a name="line.797"></a>
<span class="sourceLineNo">798</span>                                        while (it.hasNext()) {<a name="line.798"></a>
<span class="sourceLineNo">799</span>                                                double r1 = it.aDouble;<a name="line.799"></a>
<span class="sourceLineNo">800</span>                                                double r2 = it.bDouble;<a name="line.800"></a>
<span class="sourceLineNo">801</span>                                                double i1 = data[it.aIndex + 1];<a name="line.801"></a>
<span class="sourceLineNo">802</span>                                                double i2 = bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.802"></a>
<span class="sourceLineNo">803</span>                                                data[it.aIndex]     = (float) (r1*r2 - i1*i2); // ADD_CAST<a name="line.803"></a>
<span class="sourceLineNo">804</span>                                                data[it.aIndex + 1] = (float) (r1*i2 + i1*r2); // ADD_CAST<a name="line.804"></a>
<span class="sourceLineNo">805</span>                                        }<a name="line.805"></a>
<span class="sourceLineNo">806</span>                                } else {<a name="line.806"></a>
<span class="sourceLineNo">807</span>                                        while (it.hasNext()) {<a name="line.807"></a>
<span class="sourceLineNo">808</span>                                                data[it.aIndex]     *= it.bDouble;<a name="line.808"></a>
<span class="sourceLineNo">809</span>                                                data[it.aIndex + 1] *= it.bDouble;<a name="line.809"></a>
<span class="sourceLineNo">810</span>                                        }<a name="line.810"></a>
<span class="sourceLineNo">811</span>                                }<a name="line.811"></a>
<span class="sourceLineNo">812</span>                        }<a name="line.812"></a>
<span class="sourceLineNo">813</span>                }<a name="line.813"></a>
<span class="sourceLineNo">814</span>                return this;<a name="line.814"></a>
<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>        @Override<a name="line.817"></a>
<span class="sourceLineNo">818</span>        public ComplexFloatDataset idivide(final Object b) {<a name="line.818"></a>
<span class="sourceLineNo">819</span>                setDirty();<a name="line.819"></a>
<span class="sourceLineNo">820</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.820"></a>
<span class="sourceLineNo">821</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.821"></a>
<span class="sourceLineNo">822</span>                if (bds.getSize() == 1) {<a name="line.822"></a>
<span class="sourceLineNo">823</span>                        final IndexIterator it = getIterator();<a name="line.823"></a>
<span class="sourceLineNo">824</span>                        final int bOffset = bds.getOffset();<a name="line.824"></a>
<span class="sourceLineNo">825</span>                        if (useLong) { // note no complex longs<a name="line.825"></a>
<span class="sourceLineNo">826</span>                                final long r2 = bds.getElementLongAbs(bOffset);<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.index]     /= r2;<a name="line.828"></a>
<span class="sourceLineNo">829</span>                                        data[it.index + 1] /= r2;<a name="line.829"></a>
<span class="sourceLineNo">830</span>                                }<a name="line.830"></a>
<span class="sourceLineNo">831</span>                        } else {<a name="line.831"></a>
<span class="sourceLineNo">832</span>                                final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.832"></a>
<span class="sourceLineNo">833</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.833"></a>
<span class="sourceLineNo">834</span>                                        while (it.hasNext()) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>                                                data[it.index]     /= r2;<a name="line.835"></a>
<span class="sourceLineNo">836</span>                                                data[it.index + 1] /= r2;<a name="line.836"></a>
<span class="sourceLineNo">837</span>                                        }<a name="line.837"></a>
<span class="sourceLineNo">838</span>                                } else {<a name="line.838"></a>
<span class="sourceLineNo">839</span>                                        final double i2 = bds.getElementDoubleAbs(bOffset + 1);<a name="line.839"></a>
<span class="sourceLineNo">840</span>                                        if (Math.abs(r2) &lt; Math.abs(i2)) {<a name="line.840"></a>
<span class="sourceLineNo">841</span>                                                double q = r2/i2;<a name="line.841"></a>
<span class="sourceLineNo">842</span>                                                double den = r2*q + i2;<a name="line.842"></a>
<span class="sourceLineNo">843</span>                                                while (it.hasNext()) {<a name="line.843"></a>
<span class="sourceLineNo">844</span>                                                        double r1 = data[it.index];<a name="line.844"></a>
<span class="sourceLineNo">845</span>                                                        double i1 = data[it.index + 1];<a name="line.845"></a>
<span class="sourceLineNo">846</span>                                                        data[it.index]     = (float) ((r1*q + i1) / den); // ADD_CAST<a name="line.846"></a>
<span class="sourceLineNo">847</span>                                                        data[it.index + 1] = (float) ((i1*q - r1) / den); // ADD_CAST<a name="line.847"></a>
<span class="sourceLineNo">848</span>                                                }<a name="line.848"></a>
<span class="sourceLineNo">849</span>                                        } else {<a name="line.849"></a>
<span class="sourceLineNo">850</span>                                                double q = i2/r2;<a name="line.850"></a>
<span class="sourceLineNo">851</span>                                                double den = i2*q + r2;<a name="line.851"></a>
<span class="sourceLineNo">852</span>                                                if (den == 0) {<a name="line.852"></a>
<span class="sourceLineNo">853</span>                                                        while (it.hasNext()) {<a name="line.853"></a>
<span class="sourceLineNo">854</span>                                                                data[it.index]     = Float.NaN; // CLASS_TYPE<a name="line.854"></a>
<span class="sourceLineNo">855</span>                                                                data[it.index + 1] = Float.NaN; // CLASS_TYPE<a name="line.855"></a>
<span class="sourceLineNo">856</span>                                                        }<a name="line.856"></a>
<span class="sourceLineNo">857</span>                                                } else {<a name="line.857"></a>
<span class="sourceLineNo">858</span>                                                        while (it.hasNext()) {<a name="line.858"></a>
<span class="sourceLineNo">859</span>                                                                double r1 = data[it.index];<a name="line.859"></a>
<span class="sourceLineNo">860</span>                                                                double i1 = data[it.index + 1];<a name="line.860"></a>
<span class="sourceLineNo">861</span>                                                                data[it.index]     = (float) ((i1 * q + r1) / den); // ADD_CAST<a name="line.861"></a>
<span class="sourceLineNo">862</span>                                                                data[it.index + 1] = (float) ((i1 - r1 * q) / den); // ADD_CAST<a name="line.862"></a>
<span class="sourceLineNo">863</span>                                                        }<a name="line.863"></a>
<span class="sourceLineNo">864</span>                                                }<a name="line.864"></a>
<span class="sourceLineNo">865</span>                                        }<a name="line.865"></a>
<span class="sourceLineNo">866</span>                                }<a name="line.866"></a>
<span class="sourceLineNo">867</span>                        }<a name="line.867"></a>
<span class="sourceLineNo">868</span>                } else {<a name="line.868"></a>
<span class="sourceLineNo">869</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.869"></a>
<span class="sourceLineNo">870</span>                        it.setOutputDouble(!useLong);<a name="line.870"></a>
<span class="sourceLineNo">871</span>                        if (useLong) {<a name="line.871"></a>
<span class="sourceLineNo">872</span>                                while (it.hasNext()) {<a name="line.872"></a>
<span class="sourceLineNo">873</span>                                        data[it.aIndex]     /= it.bLong;<a name="line.873"></a>
<span class="sourceLineNo">874</span>                                        data[it.aIndex + 1] /= it.bLong;<a name="line.874"></a>
<span class="sourceLineNo">875</span>                                }<a name="line.875"></a>
<span class="sourceLineNo">876</span>                        } else {<a name="line.876"></a>
<span class="sourceLineNo">877</span>                                if (bds.isComplex()) {<a name="line.877"></a>
<span class="sourceLineNo">878</span>                                        while (it.hasNext()) {<a name="line.878"></a>
<span class="sourceLineNo">879</span>                                                double r1 = it.aDouble;<a name="line.879"></a>
<span class="sourceLineNo">880</span>                                                double r2 = it.bDouble;<a name="line.880"></a>
<span class="sourceLineNo">881</span>                                                double i1 = data[it.aIndex + 1];<a name="line.881"></a>
<span class="sourceLineNo">882</span>                                                double i2 = bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.882"></a>
<span class="sourceLineNo">883</span>                                                if (Math.abs(r2) &lt; Math.abs(i2)) {<a name="line.883"></a>
<span class="sourceLineNo">884</span>                                                        double q = r2/i2;<a name="line.884"></a>
<span class="sourceLineNo">885</span>                                                        double den = r2*q + i2;<a name="line.885"></a>
<span class="sourceLineNo">886</span>                                                        data[it.aIndex]     = (float) ((r1*q + i1) / den); // ADD_CAST<a name="line.886"></a>
<span class="sourceLineNo">887</span>                                                        data[it.aIndex + 1] = (float) ((i1*q - r1) / den); // ADD_CAST<a name="line.887"></a>
<span class="sourceLineNo">888</span>                                                } else {<a name="line.888"></a>
<span class="sourceLineNo">889</span>                                                        double q = i2/r2;<a name="line.889"></a>
<span class="sourceLineNo">890</span>                                                        double den = i2*q + r2;<a name="line.890"></a>
<span class="sourceLineNo">891</span>                                                        if (den == 0) {<a name="line.891"></a>
<span class="sourceLineNo">892</span>                                                                data[it.aIndex]     = Float.NaN; // CLASS_TYPE<a name="line.892"></a>
<span class="sourceLineNo">893</span>                                                                data[it.aIndex + 1] = Float.NaN; // CLASS_TYPE<a name="line.893"></a>
<span class="sourceLineNo">894</span>                                                        } else {<a name="line.894"></a>
<span class="sourceLineNo">895</span>                                                                data[it.aIndex]     = (float) ((i1 * q + r1) / den); // ADD_CAST<a name="line.895"></a>
<span class="sourceLineNo">896</span>                                                                data[it.aIndex + 1] = (float) ((i1 - r1 * q) / den); // ADD_CAST<a name="line.896"></a>
<span class="sourceLineNo">897</span>                                                        }<a name="line.897"></a>
<span class="sourceLineNo">898</span>                                                }<a name="line.898"></a>
<span class="sourceLineNo">899</span>                                        }<a name="line.899"></a>
<span class="sourceLineNo">900</span>                                } else {<a name="line.900"></a>
<span class="sourceLineNo">901</span>                                        while (it.hasNext()) {<a name="line.901"></a>
<span class="sourceLineNo">902</span>                                                data[it.aIndex]     /= it.bDouble;<a name="line.902"></a>
<span class="sourceLineNo">903</span>                                                data[it.aIndex + 1] /= it.bDouble;<a name="line.903"></a>
<span class="sourceLineNo">904</span>                                        }<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>                return this;<a name="line.908"></a>
<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
<span class="sourceLineNo">910</span><a name="line.910"></a>
<span class="sourceLineNo">911</span>        @Override<a name="line.911"></a>
<span class="sourceLineNo">912</span>        public ComplexFloatDataset iremainder(final Object b) {<a name="line.912"></a>
<span class="sourceLineNo">913</span>                throw new UnsupportedOperationException("Unsupported method for class");<a name="line.913"></a>
<span class="sourceLineNo">914</span>        }<a name="line.914"></a>
<span class="sourceLineNo">915</span><a name="line.915"></a>
<span class="sourceLineNo">916</span>        @Override<a name="line.916"></a>
<span class="sourceLineNo">917</span>        public ComplexFloatDataset ipower(final Object b) {<a name="line.917"></a>
<span class="sourceLineNo">918</span>                setDirty();<a name="line.918"></a>
<span class="sourceLineNo">919</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.919"></a>
<span class="sourceLineNo">920</span>                if (bds.getSize() == 1) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                        final IndexIterator it = getIterator();<a name="line.921"></a>
<span class="sourceLineNo">922</span>                        final int bOffset = bds.getOffset();<a name="line.922"></a>
<span class="sourceLineNo">923</span>                        final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.923"></a>
<span class="sourceLineNo">924</span>                        if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.924"></a>
<span class="sourceLineNo">925</span>                                while (it.hasNext()) {<a name="line.925"></a>
<span class="sourceLineNo">926</span>                                        final Complex zd = new Complex(data[it.index], data[it.index + 1]).pow(r2);<a name="line.926"></a>
<span class="sourceLineNo">927</span>                                        data[it.index]     = (float) zd.getReal(); // ADD_CAST<a name="line.927"></a>
<span class="sourceLineNo">928</span>                                        data[it.index + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.928"></a>
<span class="sourceLineNo">929</span>                                }<a name="line.929"></a>
<span class="sourceLineNo">930</span>                        } else {<a name="line.930"></a>
<span class="sourceLineNo">931</span>                                final Complex zv = new Complex(r2, bds.getElementDoubleAbs(bOffset + 1));<a name="line.931"></a>
<span class="sourceLineNo">932</span>                                while (it.hasNext()) {<a name="line.932"></a>
<span class="sourceLineNo">933</span>                                        final Complex zd = new Complex(data[it.index], data[it.index + 1]).pow(zv);<a name="line.933"></a>
<span class="sourceLineNo">934</span>                                        data[it.index]     = (float) zd.getReal(); // ADD_CAST<a name="line.934"></a>
<span class="sourceLineNo">935</span>                                        data[it.index + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.935"></a>
<span class="sourceLineNo">936</span>                                }<a name="line.936"></a>
<span class="sourceLineNo">937</span>                        }<a name="line.937"></a>
<span class="sourceLineNo">938</span>                } else {<a name="line.938"></a>
<span class="sourceLineNo">939</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.939"></a>
<span class="sourceLineNo">940</span>                        it.setOutputDouble(true);<a name="line.940"></a>
<span class="sourceLineNo">941</span>                        if (bds.isComplex()) {<a name="line.941"></a>
<span class="sourceLineNo">942</span>                                while (it.hasNext()) {<a name="line.942"></a>
<span class="sourceLineNo">943</span>                                        final Complex zv = new Complex(it.bDouble, bds.getElementDoubleAbs(it.bIndex + 1));<a name="line.943"></a>
<span class="sourceLineNo">944</span>                                        final Complex zd = new Complex(it.aDouble, data[it.aIndex + 1]).pow(zv);<a name="line.944"></a>
<span class="sourceLineNo">945</span>                                        data[it.aIndex]     = (float) zd.getReal(); // ADD_CAST<a name="line.945"></a>
<span class="sourceLineNo">946</span>                                        data[it.aIndex + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.946"></a>
<span class="sourceLineNo">947</span>                                }<a name="line.947"></a>
<span class="sourceLineNo">948</span>                        } else {<a name="line.948"></a>
<span class="sourceLineNo">949</span>                                while (it.hasNext()) {<a name="line.949"></a>
<span class="sourceLineNo">950</span>                                        final Complex zd = new Complex(it.aDouble, data[it.aIndex + 1]).pow(it.bDouble);<a name="line.950"></a>
<span class="sourceLineNo">951</span>                                        data[it.aIndex]     = (float) zd.getReal(); // ADD_CAST<a name="line.951"></a>
<span class="sourceLineNo">952</span>                                        data[it.aIndex + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.952"></a>
<span class="sourceLineNo">953</span>                                }<a name="line.953"></a>
<span class="sourceLineNo">954</span>                        }<a name="line.954"></a>
<span class="sourceLineNo">955</span>                }<a name="line.955"></a>
<span class="sourceLineNo">956</span>                return this;<a name="line.956"></a>
<span class="sourceLineNo">957</span>        }<a name="line.957"></a>
<span class="sourceLineNo">958</span><a name="line.958"></a>
<span class="sourceLineNo">959</span>        @Override<a name="line.959"></a>
<span class="sourceLineNo">960</span>        public double residual(final Object b, Dataset w, boolean ignoreNaNs) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.961"></a>
<span class="sourceLineNo">962</span>                final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.962"></a>
<span class="sourceLineNo">963</span>                it.setOutputDouble(true);<a name="line.963"></a>
<span class="sourceLineNo">964</span>                double sum = 0;<a name="line.964"></a>
<span class="sourceLineNo">965</span>                double comp = 0;<a name="line.965"></a>
<span class="sourceLineNo">966</span>                final int bis = bds.getElementsPerItem();<a name="line.966"></a>
<span class="sourceLineNo">967</span><a name="line.967"></a>
<span class="sourceLineNo">968</span>                if (bis == 1) {<a name="line.968"></a>
<span class="sourceLineNo">969</span>                        if (w == null) {<a name="line.969"></a>
<span class="sourceLineNo">970</span>                                while (it.hasNext()) {<a name="line.970"></a>
<span class="sourceLineNo">971</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.971"></a>
<span class="sourceLineNo">972</span>                                        double diffi = data[it.aIndex + 1];<a name="line.972"></a>
<span class="sourceLineNo">973</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.973"></a>
<span class="sourceLineNo">974</span>                                                continue;<a name="line.974"></a>
<span class="sourceLineNo">975</span>                                        }<a name="line.975"></a>
<span class="sourceLineNo">976</span>                                        double err = diffr * diffr - comp;<a name="line.976"></a>
<span class="sourceLineNo">977</span>                                        double temp = sum + err;<a name="line.977"></a>
<span class="sourceLineNo">978</span>                                        comp = (temp - sum) - err;<a name="line.978"></a>
<span class="sourceLineNo">979</span>                                        sum = temp;<a name="line.979"></a>
<span class="sourceLineNo">980</span><a name="line.980"></a>
<span class="sourceLineNo">981</span>                                        err = diffi * diffi - comp;<a name="line.981"></a>
<span class="sourceLineNo">982</span>                                        temp = sum + err;<a name="line.982"></a>
<span class="sourceLineNo">983</span>                                        comp = (temp - sum) - err;<a name="line.983"></a>
<span class="sourceLineNo">984</span>                                        sum = temp;<a name="line.984"></a>
<span class="sourceLineNo">985</span>                                }<a name="line.985"></a>
<span class="sourceLineNo">986</span>                        } else {<a name="line.986"></a>
<span class="sourceLineNo">987</span>                                IndexIterator itw = w.getIterator();<a name="line.987"></a>
<span class="sourceLineNo">988</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.989"></a>
<span class="sourceLineNo">990</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.990"></a>
<span class="sourceLineNo">991</span>                                        double diffi = data[it.aIndex + 1];<a name="line.991"></a>
<span class="sourceLineNo">992</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.992"></a>
<span class="sourceLineNo">993</span>                                                continue;<a name="line.993"></a>
<span class="sourceLineNo">994</span>                                        }<a name="line.994"></a>
<span class="sourceLineNo">995</span>                                        double err = diffr * diffr * dw - comp;<a name="line.995"></a>
<span class="sourceLineNo">996</span>                                        double temp = sum + err;<a name="line.996"></a>
<span class="sourceLineNo">997</span>                                        comp = (temp - sum) - err;<a name="line.997"></a>
<span class="sourceLineNo">998</span>                                        sum = temp;<a name="line.998"></a>
<span class="sourceLineNo">999</span><a name="line.999"></a>
<span class="sourceLineNo">1000</span>                                        err = diffi * diffi * dw - comp;<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                                        temp = sum + err;<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                                        comp = (temp - sum) - err;<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                                        sum = temp;<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>                                }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>                        }<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                } else {<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                        if (w == null) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                                while (it.hasNext()) {<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                                        double diffi = data[it.aIndex] - bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                                                continue;<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                                        }<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                                        double err = diffr * diffr - comp;<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                                        double temp = sum + err;<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                                        comp = (temp - sum) - err;<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                                        sum = temp;<a name="line.1017"></a>
<span class="sourceLineNo">1018</span><a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                                        err = diffi * diffi - comp;<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                                        temp = sum + err;<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                                        comp = (temp - sum) - err;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                                        sum = temp;<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                                }<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                        } else {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                                IndexIterator itw = w.getIterator();<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>                                        double diffi = data[it.aIndex] - bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                                                continue;<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                                        }<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                                        double err = diffr * diffr * dw - comp;<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                                        double temp = sum + err;<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                                        comp = (temp - sum) - err;<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                                        sum = temp;<a name="line.1036"></a>
<span class="sourceLineNo">1037</span><a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                                        err = diffi * diffi * dw - comp;<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                                        temp = sum + err;<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                                        comp = (temp - sum) - err;<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                                        sum = temp;<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                                }<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                        }<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                return sum;<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>}<a name="line.1047"></a>




























































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