<!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>                try {<a name="line.132"></a>
<span class="sourceLineNo">133</span>                        odata = data = createArray(size);<a name="line.133"></a>
<span class="sourceLineNo">134</span>                } catch (Throwable t) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.135"></a>
<span class="sourceLineNo">136</span>                        throw new IllegalArgumentException(t);<a name="line.136"></a>
<span class="sourceLineNo">137</span>                }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>                IndexIterator iter = dataset.getIterator();<a name="line.139"></a>
<span class="sourceLineNo">140</span>                if (dataset.isComplex()) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                        for (int i = 0; iter.hasNext(); i += isize) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>                                data[i] = (float) dataset.getElementDoubleAbs(iter.index); // ADD_CAST<a name="line.142"></a>
<span class="sourceLineNo">143</span>                                data[i+1] = (float) dataset.getElementDoubleAbs(iter.index+1); // ADD_CAST<a name="line.143"></a>
<span class="sourceLineNo">144</span>                        }<a name="line.144"></a>
<span class="sourceLineNo">145</span>                } else {<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        for (int i = 0; iter.hasNext(); i += isize) {<a name="line.146"></a>
<span class="sourceLineNo">147</span>                                data[i] = (float) dataset.getElementDoubleAbs(iter.index); // ADD_CAST<a name="line.147"></a>
<span class="sourceLineNo">148</span>                        }<a name="line.148"></a>
<span class="sourceLineNo">149</span>                }<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>        @Override<a name="line.152"></a>
<span class="sourceLineNo">153</span>        public ComplexFloatDataset clone() {<a name="line.153"></a>
<span class="sourceLineNo">154</span>                return new ComplexFloatDataset(this);<a name="line.154"></a>
<span class="sourceLineNo">155</span>        }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>        /**<a name="line.157"></a>
<span class="sourceLineNo">158</span>         * Create a dataset from an object which could be a Java list, array (of arrays...)<a name="line.158"></a>
<span class="sourceLineNo">159</span>         * or Number. Ragged sequences or arrays are padded with zeros.<a name="line.159"></a>
<span class="sourceLineNo">160</span>         *<a name="line.160"></a>
<span class="sourceLineNo">161</span>         * @param obj<a name="line.161"></a>
<span class="sourceLineNo">162</span>         * @return dataset with contents given by input<a name="line.162"></a>
<span class="sourceLineNo">163</span>         */<a name="line.163"></a>
<span class="sourceLineNo">164</span>        static ComplexFloatDataset createFromObject(final Object obj) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>                ComplexFloatDataset result = new ComplexFloatDataset();<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>                result.shape = ShapeUtils.getShapeFromObject(obj);<a name="line.167"></a>
<span class="sourceLineNo">168</span>                result.size = ShapeUtils.calcSize(result.shape);<a name="line.168"></a>
<span class="sourceLineNo">169</span><a name="line.169"></a>
<span class="sourceLineNo">170</span>                try {<a name="line.170"></a>
<span class="sourceLineNo">171</span>                        result.odata = result.data = result.createArray(result.size);<a name="line.171"></a>
<span class="sourceLineNo">172</span>                } catch (Throwable t) {<a name="line.172"></a>
<span class="sourceLineNo">173</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(result.shape), t);<a name="line.173"></a>
<span class="sourceLineNo">174</span>                        throw new IllegalArgumentException(t);<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>                int[] pos = new int[result.shape.length];<a name="line.177"></a>
<span class="sourceLineNo">178</span>                result.fillData(obj, 0, pos);<a name="line.178"></a>
<span class="sourceLineNo">179</span>                return result;<a name="line.179"></a>
<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
<span class="sourceLineNo">181</span><a name="line.181"></a>
<span class="sourceLineNo">182</span>        /**<a name="line.182"></a>
<span class="sourceLineNo">183</span>         * @param stop<a name="line.183"></a>
<span class="sourceLineNo">184</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.184"></a>
<span class="sourceLineNo">185</span>         */<a name="line.185"></a>
<span class="sourceLineNo">186</span>        static ComplexFloatDataset createRange(final double stop) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>                return createRange(0, stop, 1);<a name="line.187"></a>
<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>        /**<a name="line.190"></a>
<span class="sourceLineNo">191</span>         * @param start<a name="line.191"></a>
<span class="sourceLineNo">192</span>         * @param stop<a name="line.192"></a>
<span class="sourceLineNo">193</span>         * @param step<a name="line.193"></a>
<span class="sourceLineNo">194</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.194"></a>
<span class="sourceLineNo">195</span>         */<a name="line.195"></a>
<span class="sourceLineNo">196</span>        static ComplexFloatDataset createRange(final double start, final double stop, final double step) {<a name="line.196"></a>
<span class="sourceLineNo">197</span>                int size = calcSteps(start, stop, step);<a name="line.197"></a>
<span class="sourceLineNo">198</span>                ComplexFloatDataset result = new ComplexFloatDataset(size);<a name="line.198"></a>
<span class="sourceLineNo">199</span>                for (int i = 0; i &lt; size; i ++) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>                        result.data[i*ISIZE] = (float) (start + i*step); // ADD_CAST<a name="line.200"></a>
<span class="sourceLineNo">201</span>                }<a name="line.201"></a>
<span class="sourceLineNo">202</span>                return result;<a name="line.202"></a>
<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>        /**<a name="line.205"></a>
<span class="sourceLineNo">206</span>         * @param shape<a name="line.206"></a>
<span class="sourceLineNo">207</span>         * @return a dataset filled with ones<a name="line.207"></a>
<span class="sourceLineNo">208</span>         */<a name="line.208"></a>
<span class="sourceLineNo">209</span>        static ComplexFloatDataset ones(final int... shape) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                return new ComplexFloatDataset(shape).fill(1);<a name="line.210"></a>
<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
<span class="sourceLineNo">214</span>        public ComplexFloatDataset fill(final Object obj) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>                setDirty();<a name="line.215"></a>
<span class="sourceLineNo">216</span>                float vr = (float) DTypeUtils.toReal(obj); // PRIM_TYPE // ADD_CAST<a name="line.216"></a>
<span class="sourceLineNo">217</span>                float vi = (float) DTypeUtils.toImag(obj); // PRIM_TYPE // ADD_CAST<a name="line.217"></a>
<span class="sourceLineNo">218</span>                IndexIterator iter = getIterator();<a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span>                while (iter.hasNext()) {<a name="line.220"></a>
<span class="sourceLineNo">221</span>                        data[iter.index] = vr;<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        data[iter.index+1] = vi;<a name="line.222"></a>
<span class="sourceLineNo">223</span>                }<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>                return this;<a name="line.225"></a>
<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>        @Override<a name="line.228"></a>
<span class="sourceLineNo">229</span>        public ComplexFloatDataset getView(boolean deepCopyMetadata) {<a name="line.229"></a>
<span class="sourceLineNo">230</span>                ComplexFloatDataset view = new ComplexFloatDataset();<a name="line.230"></a>
<span class="sourceLineNo">231</span>                copyToView(this, view, true, deepCopyMetadata);<a name="line.231"></a>
<span class="sourceLineNo">232</span>                view.data = data;<a name="line.232"></a>
<span class="sourceLineNo">233</span>                return view;<a name="line.233"></a>
<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>        /**<a name="line.236"></a>
<span class="sourceLineNo">237</span>         * Get complex value at absolute index in the internal array.<a name="line.237"></a>
<span class="sourceLineNo">238</span>         *<a name="line.238"></a>
<span class="sourceLineNo">239</span>         * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator.<a name="line.239"></a>
<span class="sourceLineNo">240</span>         *<a name="line.240"></a>
<span class="sourceLineNo">241</span>         * @param index absolute index<a name="line.241"></a>
<span class="sourceLineNo">242</span>         * @return value<a name="line.242"></a>
<span class="sourceLineNo">243</span>         */<a name="line.243"></a>
<span class="sourceLineNo">244</span>        public Complex getComplexAbs(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 Object getObjectAbs(final int index) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                return new Complex(data[index], data[index+1]);<a name="line.250"></a>
<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>        @Override<a name="line.253"></a>
<span class="sourceLineNo">254</span>        public String getStringAbs(final int index) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>                float di = data[index + 1]; // PRIM_TYPE<a name="line.255"></a>
<span class="sourceLineNo">256</span>                if (stringFormat == null) {<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        return di &gt;= 0 ? String.format("%.8g + %.8gj", data[index], di) : // FORMAT_STRING<a name="line.257"></a>
<span class="sourceLineNo">258</span>                                String.format("%.8g - %.8gj", data[index], -di); // FORMAT_STRING<a name="line.258"></a>
<span class="sourceLineNo">259</span>                }<a name="line.259"></a>
<span class="sourceLineNo">260</span>                StringBuilder s = new StringBuilder();<a name="line.260"></a>
<span class="sourceLineNo">261</span>                s.append(stringFormat.format(data[index]));<a name="line.261"></a>
<span class="sourceLineNo">262</span>                if (di &gt;= 0) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        s.append(" + ");<a name="line.263"></a>
<span class="sourceLineNo">264</span>                        s.append(stringFormat.format(di));<a name="line.264"></a>
<span class="sourceLineNo">265</span>                } else {<a name="line.265"></a>
<span class="sourceLineNo">266</span>                        s.append(" - ");<a name="line.266"></a>
<span class="sourceLineNo">267</span>                        s.append(stringFormat.format(-di));<a name="line.267"></a>
<span class="sourceLineNo">268</span>                }<a name="line.268"></a>
<span class="sourceLineNo">269</span>                s.append('j');<a name="line.269"></a>
<span class="sourceLineNo">270</span>                return s.toString();<a name="line.270"></a>
<span class="sourceLineNo">271</span>        }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>        /**<a name="line.273"></a>
<span class="sourceLineNo">274</span>         * Set values at absolute index in the internal array.<a name="line.274"></a>
<span class="sourceLineNo">275</span>         *<a name="line.275"></a>
<span class="sourceLineNo">276</span>         * This is an internal method with no checks so can be dangerous. Use with care or ideally with an iterator.<a name="line.276"></a>
<span class="sourceLineNo">277</span>         * @param index absolute index<a name="line.277"></a>
<span class="sourceLineNo">278</span>         * @param val new values<a name="line.278"></a>
<span class="sourceLineNo">279</span>         */<a name="line.279"></a>
<span class="sourceLineNo">280</span>        public void setAbs(final int index, final Complex val) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                setAbs(index, (float) val.getReal(), (float) val.getImaginary()); // 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>        @Override<a name="line.284"></a>
<span class="sourceLineNo">285</span>        public void setObjectAbs(final int index, final Object obj) {<a name="line.285"></a>
<span class="sourceLineNo">286</span>                setAbs(index, (float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)); // PRIM_TYPE<a name="line.286"></a>
<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>        /**<a name="line.289"></a>
<span class="sourceLineNo">290</span>         * Set item at index to complex value given by real and imaginary parts<a name="line.290"></a>
<span class="sourceLineNo">291</span>         * @param index absolute index<a name="line.291"></a>
<span class="sourceLineNo">292</span>         * @param real<a name="line.292"></a>
<span class="sourceLineNo">293</span>         * @param imag<a name="line.293"></a>
<span class="sourceLineNo">294</span>         */<a name="line.294"></a>
<span class="sourceLineNo">295</span>        public void setAbs(final int index, final float real, final float imag) { // PRIM_TYPE<a name="line.295"></a>
<span class="sourceLineNo">296</span>                setDirty();<a name="line.296"></a>
<span class="sourceLineNo">297</span>                data[index] = real;<a name="line.297"></a>
<span class="sourceLineNo">298</span>                data[index+1] = imag;<a name="line.298"></a>
<span class="sourceLineNo">299</span>        }<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>        /**<a name="line.301"></a>
<span class="sourceLineNo">302</span>         * @return item in first position<a name="line.302"></a>
<span class="sourceLineNo">303</span>         * @since 2.0<a name="line.303"></a>
<span class="sourceLineNo">304</span>         */<a name="line.304"></a>
<span class="sourceLineNo">305</span>        public Complex get() {<a name="line.305"></a>
<span class="sourceLineNo">306</span>                int n = getFirst1DIndex();<a name="line.306"></a>
<span class="sourceLineNo">307</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.307"></a>
<span class="sourceLineNo">308</span>                return z;<a name="line.308"></a>
<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>        /**<a name="line.311"></a>
<span class="sourceLineNo">312</span>         * @param i<a name="line.312"></a>
<span class="sourceLineNo">313</span>         * @return item in given position<a name="line.313"></a>
<span class="sourceLineNo">314</span>         */<a name="line.314"></a>
<span class="sourceLineNo">315</span>        public Complex get(final int i) {<a name="line.315"></a>
<span class="sourceLineNo">316</span>                int n = get1DIndex(i);<a name="line.316"></a>
<span class="sourceLineNo">317</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.317"></a>
<span class="sourceLineNo">318</span>                return z;<a name="line.318"></a>
<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>        /**<a name="line.321"></a>
<span class="sourceLineNo">322</span>         * @param i<a name="line.322"></a>
<span class="sourceLineNo">323</span>         * @param j<a name="line.323"></a>
<span class="sourceLineNo">324</span>         * @return item in given position<a name="line.324"></a>
<span class="sourceLineNo">325</span>         */<a name="line.325"></a>
<span class="sourceLineNo">326</span>        public Complex get(final int i, final int j) {<a name="line.326"></a>
<span class="sourceLineNo">327</span>                int n = get1DIndex(i, j);<a name="line.327"></a>
<span class="sourceLineNo">328</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.328"></a>
<span class="sourceLineNo">329</span>                return z;<a name="line.329"></a>
<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
<span class="sourceLineNo">332</span>        /**<a name="line.332"></a>
<span class="sourceLineNo">333</span>         * @param pos<a name="line.333"></a>
<span class="sourceLineNo">334</span>         * @return item in given position<a name="line.334"></a>
<span class="sourceLineNo">335</span>         */<a name="line.335"></a>
<span class="sourceLineNo">336</span>        public Complex get(final int... pos) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>                int n = get1DIndex(pos);<a name="line.337"></a>
<span class="sourceLineNo">338</span>                Complex z = new Complex(data[n], data[n+1]);<a name="line.338"></a>
<span class="sourceLineNo">339</span>                return z;<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() {<a name="line.343"></a>
<span class="sourceLineNo">344</span>                return get();<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) {<a name="line.348"></a>
<span class="sourceLineNo">349</span>                return get(i);<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 i, final int j) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                return get(i, j);<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>        @Override<a name="line.357"></a>
<span class="sourceLineNo">358</span>        public Object getObject(final int... pos) {<a name="line.358"></a>
<span class="sourceLineNo">359</span>                return getComplex(pos);<a name="line.359"></a>
<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>        /**<a name="line.362"></a>
<span class="sourceLineNo">363</span>         * @return item in first position<a name="line.363"></a>
<span class="sourceLineNo">364</span>         * @since 2.0<a name="line.364"></a>
<span class="sourceLineNo">365</span>         */<a name="line.365"></a>
<span class="sourceLineNo">366</span>        public float getReal() { // PRIM_TYPE<a name="line.366"></a>
<span class="sourceLineNo">367</span>                return (float) getFirstValue(); // PRIM_TYPE<a name="line.367"></a>
<span class="sourceLineNo">368</span>        }<a name="line.368"></a>
<span class="sourceLineNo">369</span><a name="line.369"></a>
<span class="sourceLineNo">370</span>        /**<a name="line.370"></a>
<span class="sourceLineNo">371</span>         * @param i<a name="line.371"></a>
<span class="sourceLineNo">372</span>         * @return item in given position<a name="line.372"></a>
<span class="sourceLineNo">373</span>         */<a name="line.373"></a>
<span class="sourceLineNo">374</span>        public float getReal(final int i) { // PRIM_TYPE<a name="line.374"></a>
<span class="sourceLineNo">375</span>                return (float) getFirstValue(i); // PRIM_TYPE<a name="line.375"></a>
<span class="sourceLineNo">376</span>        }<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>        /**<a name="line.378"></a>
<span class="sourceLineNo">379</span>         * @param i<a name="line.379"></a>
<span class="sourceLineNo">380</span>         * @param j<a name="line.380"></a>
<span class="sourceLineNo">381</span>         * @return item in given position<a name="line.381"></a>
<span class="sourceLineNo">382</span>         */<a name="line.382"></a>
<span class="sourceLineNo">383</span>        public float getReal(final int i, final int j) { // PRIM_TYPE<a name="line.383"></a>
<span class="sourceLineNo">384</span>                return (float) getFirstValue(i, j); // PRIM_TYPE<a name="line.384"></a>
<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>        /**<a name="line.387"></a>
<span class="sourceLineNo">388</span>         * @param pos<a name="line.388"></a>
<span class="sourceLineNo">389</span>         * @return item in given position<a name="line.389"></a>
<span class="sourceLineNo">390</span>         */<a name="line.390"></a>
<span class="sourceLineNo">391</span>        public float getReal(final int... pos) { // PRIM_TYPE<a name="line.391"></a>
<span class="sourceLineNo">392</span>                return (float) getFirstValue(pos); // PRIM_TYPE<a name="line.392"></a>
<span class="sourceLineNo">393</span>        }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
<span class="sourceLineNo">395</span>        /**<a name="line.395"></a>
<span class="sourceLineNo">396</span>         * @return item in first position<a name="line.396"></a>
<span class="sourceLineNo">397</span>         * @since 2.0<a name="line.397"></a>
<span class="sourceLineNo">398</span>         */<a name="line.398"></a>
<span class="sourceLineNo">399</span>        public float getImag() { // PRIM_TYPE<a name="line.399"></a>
<span class="sourceLineNo">400</span>                return data[getFirst1DIndex() + 1];<a name="line.400"></a>
<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>        /**<a name="line.403"></a>
<span class="sourceLineNo">404</span>         * @param i<a name="line.404"></a>
<span class="sourceLineNo">405</span>         * @return item in given position<a name="line.405"></a>
<span class="sourceLineNo">406</span>         */<a name="line.406"></a>
<span class="sourceLineNo">407</span>        public float getImag(final int i) { // PRIM_TYPE<a name="line.407"></a>
<span class="sourceLineNo">408</span>                return data[get1DIndex(i) + 1];<a name="line.408"></a>
<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>        /**<a name="line.411"></a>
<span class="sourceLineNo">412</span>         * @param i<a name="line.412"></a>
<span class="sourceLineNo">413</span>         * @param j<a name="line.413"></a>
<span class="sourceLineNo">414</span>         * @return item in given position<a name="line.414"></a>
<span class="sourceLineNo">415</span>         */<a name="line.415"></a>
<span class="sourceLineNo">416</span>        public float getImag(final int i, final int j) { // PRIM_TYPE<a name="line.416"></a>
<span class="sourceLineNo">417</span>                return data[get1DIndex(i, j) + 1];<a name="line.417"></a>
<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>        /**<a name="line.420"></a>
<span class="sourceLineNo">421</span>         * @param pos<a name="line.421"></a>
<span class="sourceLineNo">422</span>         * @return item in given position<a name="line.422"></a>
<span class="sourceLineNo">423</span>         */<a name="line.423"></a>
<span class="sourceLineNo">424</span>        public float getImag(final int... pos) { // PRIM_TYPE<a name="line.424"></a>
<span class="sourceLineNo">425</span>                return data[get1DIndex(pos) + 1];<a name="line.425"></a>
<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>        /**<a name="line.428"></a>
<span class="sourceLineNo">429</span>         * @return item in first position<a name="line.429"></a>
<span class="sourceLineNo">430</span>         * @since 2.0<a name="line.430"></a>
<span class="sourceLineNo">431</span>         */<a name="line.431"></a>
<span class="sourceLineNo">432</span>        public Complex getComplex() {<a name="line.432"></a>
<span class="sourceLineNo">433</span>                return get();<a name="line.433"></a>
<span class="sourceLineNo">434</span>        }<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>        /**<a name="line.436"></a>
<span class="sourceLineNo">437</span>         * @param i<a name="line.437"></a>
<span class="sourceLineNo">438</span>         * @return item in given position<a name="line.438"></a>
<span class="sourceLineNo">439</span>         */<a name="line.439"></a>
<span class="sourceLineNo">440</span>        public Complex getComplex(final int i) {<a name="line.440"></a>
<span class="sourceLineNo">441</span>                return get(i);<a name="line.441"></a>
<span class="sourceLineNo">442</span>        }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>        /**<a name="line.444"></a>
<span class="sourceLineNo">445</span>         * @param i<a name="line.445"></a>
<span class="sourceLineNo">446</span>         * @param j<a name="line.446"></a>
<span class="sourceLineNo">447</span>         * @return item in given position<a name="line.447"></a>
<span class="sourceLineNo">448</span>         */<a name="line.448"></a>
<span class="sourceLineNo">449</span>        public Complex getComplex(final int i, final int j) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>                return get(i, j);<a name="line.450"></a>
<span class="sourceLineNo">451</span>        }<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>        /**<a name="line.453"></a>
<span class="sourceLineNo">454</span>         * @param pos<a name="line.454"></a>
<span class="sourceLineNo">455</span>         * @return item in given position<a name="line.455"></a>
<span class="sourceLineNo">456</span>         */<a name="line.456"></a>
<span class="sourceLineNo">457</span>        public Complex getComplex(final int... pos) {<a name="line.457"></a>
<span class="sourceLineNo">458</span>                return get(pos);<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) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, i); // 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, final int i, final int j) {<a name="line.467"></a>
<span class="sourceLineNo">468</span>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, i, j); // PRIM_TYPE<a name="line.468"></a>
<span class="sourceLineNo">469</span>        }<a name="line.469"></a>
<span class="sourceLineNo">470</span><a name="line.470"></a>
<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
<span class="sourceLineNo">472</span>        public void set(final Object obj, int... pos) {<a name="line.472"></a>
<span class="sourceLineNo">473</span>                if (pos == null || (pos.length == 0 &amp;&amp; shape.length &gt; 0)) {<a name="line.473"></a>
<span class="sourceLineNo">474</span>                        pos = new int[shape.length];<a name="line.474"></a>
<span class="sourceLineNo">475</span>                }<a name="line.475"></a>
<span class="sourceLineNo">476</span><a name="line.476"></a>
<span class="sourceLineNo">477</span>                setItem(new float[] {(float) DTypeUtils.toReal(obj), (float) DTypeUtils.toImag(obj)}, pos); // PRIM_TYPE<a name="line.477"></a>
<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
<span class="sourceLineNo">479</span><a name="line.479"></a>
<span class="sourceLineNo">480</span>        /**<a name="line.480"></a>
<span class="sourceLineNo">481</span>         * Set real and imaginary values at given position<a name="line.481"></a>
<span class="sourceLineNo">482</span>         * @param dr<a name="line.482"></a>
<span class="sourceLineNo">483</span>         * @param di<a name="line.483"></a>
<span class="sourceLineNo">484</span>         * @param i<a name="line.484"></a>
<span class="sourceLineNo">485</span>         */<a name="line.485"></a>
<span class="sourceLineNo">486</span>        public void set(final float dr, final float di, final int i) { // PRIM_TYPE<a name="line.486"></a>
<span class="sourceLineNo">487</span>                setItem(new float[] {dr, di}, i); // PRIM_TYPE<a name="line.487"></a>
<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
<span class="sourceLineNo">489</span><a name="line.489"></a>
<span class="sourceLineNo">490</span>        /**<a name="line.490"></a>
<span class="sourceLineNo">491</span>         * Set real and imaginary values at given position<a name="line.491"></a>
<span class="sourceLineNo">492</span>         * @param dr<a name="line.492"></a>
<span class="sourceLineNo">493</span>         * @param di<a name="line.493"></a>
<span class="sourceLineNo">494</span>         * @param i<a name="line.494"></a>
<span class="sourceLineNo">495</span>         * @param j<a name="line.495"></a>
<span class="sourceLineNo">496</span>         */<a name="line.496"></a>
<span class="sourceLineNo">497</span>        public void set(final float dr, final float di, final int i, final int j) { // PRIM_TYPE<a name="line.497"></a>
<span class="sourceLineNo">498</span>                setItem(new float[] {dr, di}, i, j); // PRIM_TYPE<a name="line.498"></a>
<span class="sourceLineNo">499</span>        }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>        /**<a name="line.501"></a>
<span class="sourceLineNo">502</span>         * Set real and imaginary values at given position<a name="line.502"></a>
<span class="sourceLineNo">503</span>         * @param dr<a name="line.503"></a>
<span class="sourceLineNo">504</span>         * @param di<a name="line.504"></a>
<span class="sourceLineNo">505</span>         * @param pos<a name="line.505"></a>
<span class="sourceLineNo">506</span>         * @since 2.0<a name="line.506"></a>
<span class="sourceLineNo">507</span>         */<a name="line.507"></a>
<span class="sourceLineNo">508</span>        public void set(final float dr, final float di, final int... pos) { // PRIM_TYPE<a name="line.508"></a>
<span class="sourceLineNo">509</span>                setItem(new float[] {dr, di}, pos); // PRIM_TYPE<a name="line.509"></a>
<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>        /**<a name="line.512"></a>
<span class="sourceLineNo">513</span>         * @since 2.0<a name="line.513"></a>
<span class="sourceLineNo">514</span>         */<a name="line.514"></a>
<span class="sourceLineNo">515</span>        @Override<a name="line.515"></a>
<span class="sourceLineNo">516</span>        public FloatDataset getRealPart() { // CLASS_TYPE<a name="line.516"></a>
<span class="sourceLineNo">517</span>                return getElements(0);<a name="line.517"></a>
<span class="sourceLineNo">518</span>        }<a name="line.518"></a>
<span class="sourceLineNo">519</span><a name="line.519"></a>
<span class="sourceLineNo">520</span>        /**<a name="line.520"></a>
<span class="sourceLineNo">521</span>         * @since 2.0<a name="line.521"></a>
<span class="sourceLineNo">522</span>         */<a name="line.522"></a>
<span class="sourceLineNo">523</span>        @Override<a name="line.523"></a>
<span class="sourceLineNo">524</span>        public FloatDataset getRealView() { // CLASS_TYPE<a name="line.524"></a>
<span class="sourceLineNo">525</span>                return getElementsView(0);<a name="line.525"></a>
<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>        /**<a name="line.528"></a>
<span class="sourceLineNo">529</span>         * @return imaginary part of dataset as new dataset<a name="line.529"></a>
<span class="sourceLineNo">530</span>         * @since 2.0<a name="line.530"></a>
<span class="sourceLineNo">531</span>         */<a name="line.531"></a>
<span class="sourceLineNo">532</span>        public FloatDataset getImaginaryPart() { // CLASS_TYPE<a name="line.532"></a>
<span class="sourceLineNo">533</span>                return getElements(1);<a name="line.533"></a>
<span class="sourceLineNo">534</span>        }<a name="line.534"></a>
<span class="sourceLineNo">535</span><a name="line.535"></a>
<span class="sourceLineNo">536</span>        /**<a name="line.536"></a>
<span class="sourceLineNo">537</span>         * @return view of imaginary values<a name="line.537"></a>
<span class="sourceLineNo">538</span>         */<a name="line.538"></a>
<span class="sourceLineNo">539</span>        public FloatDataset getImaginaryView() { // CLASS_TYPE<a name="line.539"></a>
<span class="sourceLineNo">540</span>                return getElementsView(1);<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 max(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 Number min(boolean... switches) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.550"></a>
<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>        @Override<a name="line.553"></a>
<span class="sourceLineNo">554</span>        public Object sum(boolean... switches) { // FIXME<a name="line.554"></a>
<span class="sourceLineNo">555</span>                double[] sum = (double[]) super.sum(switches);<a name="line.555"></a>
<span class="sourceLineNo">556</span>                return new Complex(sum[0], sum[1]);<a name="line.556"></a>
<span class="sourceLineNo">557</span>        }<a name="line.557"></a>
<span class="sourceLineNo">558</span><a name="line.558"></a>
<span class="sourceLineNo">559</span>        @Override<a name="line.559"></a>
<span class="sourceLineNo">560</span>        public Object mean(boolean... switches) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>                double[] mean = (double[]) super.mean(switches);<a name="line.561"></a>
<span class="sourceLineNo">562</span>                return new Complex(mean[0], mean[1]);<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[] maxPos(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 int[] minPos(boolean... switches) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>                throw new UnsupportedOperationException("Cannot compare complex numbers");<a name="line.572"></a>
<span class="sourceLineNo">573</span>        }<a name="line.573"></a>
<span class="sourceLineNo">574</span><a name="line.574"></a>
<span class="sourceLineNo">575</span>        @Override<a name="line.575"></a>
<span class="sourceLineNo">576</span>        public ComplexFloatDataset getSlice(final SliceIterator siter) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                ComplexFloatDataset result = new ComplexFloatDataset(siter.getShape());<a name="line.577"></a>
<span class="sourceLineNo">578</span>                float[] rdata = result.data; // PRIM_TYPE<a name="line.578"></a>
<span class="sourceLineNo">579</span>                IndexIterator riter = result.getIterator();<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>                while (siter.hasNext() &amp;&amp; riter.hasNext()) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>                        rdata[riter.index] = data[siter.index];<a name="line.582"></a>
<span class="sourceLineNo">583</span>                        rdata[riter.index+1] = data[siter.index+1];<a name="line.583"></a>
<span class="sourceLineNo">584</span>                }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>                result.setName(name + BLOCK_OPEN + Slice.createString(siter.shape, siter.start, siter.stop, siter.step) + BLOCK_CLOSE);<a name="line.586"></a>
<span class="sourceLineNo">587</span>                return result;<a name="line.587"></a>
<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>        @Override<a name="line.590"></a>
<span class="sourceLineNo">591</span>        ComplexFloatDataset setSlicedView(Dataset view, Dataset d) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>                setDirty();<a name="line.592"></a>
<span class="sourceLineNo">593</span>                final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(view, d);<a name="line.593"></a>
<span class="sourceLineNo">594</span><a name="line.594"></a>
<span class="sourceLineNo">595</span>                if (d instanceof ComplexFloatDataset || d instanceof ComplexFloatDataset) {<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] = (float) d.getElementDoubleAbs(it.bIndex + 1); // GET_ELEMENT_WITH_CAST<a name="line.598"></a>
<span class="sourceLineNo">599</span>                        }<a name="line.599"></a>
<span class="sourceLineNo">600</span>                } else {<a name="line.600"></a>
<span class="sourceLineNo">601</span>                        while (it.hasNext()) {<a name="line.601"></a>
<span class="sourceLineNo">602</span>                                data[it.aIndex] = (float) it.bDouble; // BCAST_WITH_CAST d.getElementDoubleAbs(it.bIndex);<a name="line.602"></a>
<span class="sourceLineNo">603</span>                                data[it.aIndex + 1] = 0;<a name="line.603"></a>
<span class="sourceLineNo">604</span>                        }<a name="line.604"></a>
<span class="sourceLineNo">605</span>                }<a name="line.605"></a>
<span class="sourceLineNo">606</span>                return this;<a name="line.606"></a>
<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>        @Override<a name="line.609"></a>
<span class="sourceLineNo">610</span>        public ComplexFloatDataset setSlice(final Object o, final IndexIterator siter) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>                setDirty();<a name="line.611"></a>
<span class="sourceLineNo">612</span>                if (o instanceof ComplexFloatDataset) {<a name="line.612"></a>
<span class="sourceLineNo">613</span>                        ComplexFloatDataset zds = (ComplexFloatDataset) o;<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), zds.shape)) {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                                throw new IllegalArgumentException(String.format(<a name="line.616"></a>
<span class="sourceLineNo">617</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(zds.shape),<a name="line.617"></a>
<span class="sourceLineNo">618</span>                                                Arrays.toString(siter.getShape())));<a name="line.618"></a>
<span class="sourceLineNo">619</span>                        }<a name="line.619"></a>
<span class="sourceLineNo">620</span><a name="line.620"></a>
<span class="sourceLineNo">621</span>                        IndexIterator oiter = zds.getIterator();<a name="line.621"></a>
<span class="sourceLineNo">622</span>                        float[] odata = zds.data;<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>                                data[siter.index] = odata[oiter.index];<a name="line.625"></a>
<span class="sourceLineNo">626</span>                                data[siter.index+1] = odata[oiter.index+1];<a name="line.626"></a>
<span class="sourceLineNo">627</span>                        }<a name="line.627"></a>
<span class="sourceLineNo">628</span>                } else if (o instanceof ComplexDoubleDataset) { // IGNORE_CLASS<a name="line.628"></a>
<span class="sourceLineNo">629</span>                        ComplexDoubleDataset zds = (ComplexDoubleDataset) o; // IGNORE_CLASS<a name="line.629"></a>
<span class="sourceLineNo">630</span><a name="line.630"></a>
<span class="sourceLineNo">631</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), zds.shape)) {<a name="line.631"></a>
<span class="sourceLineNo">632</span>                                throw new IllegalArgumentException(String.format(<a name="line.632"></a>
<span class="sourceLineNo">633</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(zds.shape),<a name="line.633"></a>
<span class="sourceLineNo">634</span>                                                Arrays.toString(siter.getShape())));<a name="line.634"></a>
<span class="sourceLineNo">635</span>                        }<a name="line.635"></a>
<span class="sourceLineNo">636</span><a name="line.636"></a>
<span class="sourceLineNo">637</span>                        IndexIterator oiter = zds.getIterator();<a name="line.637"></a>
<span class="sourceLineNo">638</span>                        double[] odata = zds.data;<a name="line.638"></a>
<span class="sourceLineNo">639</span><a name="line.639"></a>
<span class="sourceLineNo">640</span>                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.640"></a>
<span class="sourceLineNo">641</span>                                data[siter.index] = (float) odata[oiter.index]; // PRIM_TYPE // ADD_CAST<a name="line.641"></a>
<span class="sourceLineNo">642</span>                                data[siter.index+1] = (float) odata[oiter.index+1]; // PRIM_TYPE // ADD_CAST<a name="line.642"></a>
<span class="sourceLineNo">643</span>                        }<a name="line.643"></a>
<span class="sourceLineNo">644</span>                } else if (o instanceof IDataset) {<a name="line.644"></a>
<span class="sourceLineNo">645</span>                        super.setSlice(o, siter);<a name="line.645"></a>
<span class="sourceLineNo">646</span>                } else {<a name="line.646"></a>
<span class="sourceLineNo">647</span>                        try {<a name="line.647"></a>
<span class="sourceLineNo">648</span>                                float vr = (float) DTypeUtils.toReal(o); // PRIM_TYPE // ADD_CAST<a name="line.648"></a>
<span class="sourceLineNo">649</span>                                float vi = (float) DTypeUtils.toImag(o); // PRIM_TYPE // ADD_CAST<a name="line.649"></a>
<span class="sourceLineNo">650</span><a name="line.650"></a>
<span class="sourceLineNo">651</span>                                while (siter.hasNext()) {<a name="line.651"></a>
<span class="sourceLineNo">652</span>                                        data[siter.index]     = vr;<a name="line.652"></a>
<span class="sourceLineNo">653</span>                                        data[siter.index + 1] = vi;<a name="line.653"></a>
<span class="sourceLineNo">654</span>                                }<a name="line.654"></a>
<span class="sourceLineNo">655</span>                        } catch (IllegalArgumentException e) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>                                throw new IllegalArgumentException("Object for setting slice is not a dataset or number");<a name="line.656"></a>
<span class="sourceLineNo">657</span>                        }<a name="line.657"></a>
<span class="sourceLineNo">658</span>                }<a name="line.658"></a>
<span class="sourceLineNo">659</span>                return this;<a name="line.659"></a>
<span class="sourceLineNo">660</span>        }<a name="line.660"></a>
<span class="sourceLineNo">661</span><a name="line.661"></a>
<span class="sourceLineNo">662</span>        @Override<a name="line.662"></a>
<span class="sourceLineNo">663</span>        public ComplexFloatDataset iadd(final Object b) {<a name="line.663"></a>
<span class="sourceLineNo">664</span>                setDirty();<a name="line.664"></a>
<span class="sourceLineNo">665</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.666"></a>
<span class="sourceLineNo">667</span>                if (bds.getSize() == 1) {<a name="line.667"></a>
<span class="sourceLineNo">668</span>                        final IndexIterator it = getIterator();<a name="line.668"></a>
<span class="sourceLineNo">669</span>                        final int bOffset = bds.getOffset();<a name="line.669"></a>
<span class="sourceLineNo">670</span>                        if (useLong) { // note no complex longs<a name="line.670"></a>
<span class="sourceLineNo">671</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.671"></a>
<span class="sourceLineNo">672</span>                                while (it.hasNext()) {<a name="line.672"></a>
<span class="sourceLineNo">673</span>                                        data[it.index] += lb;<a name="line.673"></a>
<span class="sourceLineNo">674</span>                                }<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        } else {<a name="line.675"></a>
<span class="sourceLineNo">676</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.676"></a>
<span class="sourceLineNo">677</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<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>                                        }<a name="line.680"></a>
<span class="sourceLineNo">681</span>                                } else {<a name="line.681"></a>
<span class="sourceLineNo">682</span>                                        final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.682"></a>
<span class="sourceLineNo">683</span>                                        while (it.hasNext()) {<a name="line.683"></a>
<span class="sourceLineNo">684</span>                                                data[it.index]     += db;<a name="line.684"></a>
<span class="sourceLineNo">685</span>                                                data[it.index + 1] += vi;<a name="line.685"></a>
<span class="sourceLineNo">686</span>                                        }<a name="line.686"></a>
<span class="sourceLineNo">687</span>                                }<a name="line.687"></a>
<span class="sourceLineNo">688</span>                        }<a name="line.688"></a>
<span class="sourceLineNo">689</span>                } else {<a name="line.689"></a>
<span class="sourceLineNo">690</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.690"></a>
<span class="sourceLineNo">691</span>                        it.setOutputDouble(!useLong);<a name="line.691"></a>
<span class="sourceLineNo">692</span>                        if (useLong) { // note no complex longs<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.bLong;<a name="line.694"></a>
<span class="sourceLineNo">695</span>                                }<a name="line.695"></a>
<span class="sourceLineNo">696</span>                        } else {<a name="line.696"></a>
<span class="sourceLineNo">697</span>                                if (bds.isComplex()) {<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>                                                data[it.aIndex + 1] += bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                        }<a name="line.701"></a>
<span class="sourceLineNo">702</span>                                } else {<a name="line.702"></a>
<span class="sourceLineNo">703</span>                                        while (it.hasNext()) {<a name="line.703"></a>
<span class="sourceLineNo">704</span>                                                data[it.aIndex] += it.bDouble;<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>                        }<a name="line.707"></a>
<span class="sourceLineNo">708</span>                }<a name="line.708"></a>
<span class="sourceLineNo">709</span>                return this;<a name="line.709"></a>
<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
<span class="sourceLineNo">711</span><a name="line.711"></a>
<span class="sourceLineNo">712</span>        @Override<a name="line.712"></a>
<span class="sourceLineNo">713</span>        public ComplexFloatDataset isubtract(final Object b) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>                setDirty();<a name="line.714"></a>
<span class="sourceLineNo">715</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.715"></a>
<span class="sourceLineNo">716</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.716"></a>
<span class="sourceLineNo">717</span>                if (bds.getSize() == 1) {<a name="line.717"></a>
<span class="sourceLineNo">718</span>                        final IndexIterator it = getIterator();<a name="line.718"></a>
<span class="sourceLineNo">719</span>                        final int bOffset = bds.getOffset();<a name="line.719"></a>
<span class="sourceLineNo">720</span>                        if (useLong) { // note no complex longs<a name="line.720"></a>
<span class="sourceLineNo">721</span>                                final long lb = bds.getElementLongAbs(bOffset);<a name="line.721"></a>
<span class="sourceLineNo">722</span>                                while (it.hasNext()) {<a name="line.722"></a>
<span class="sourceLineNo">723</span>                                        data[it.index] -= lb;<a name="line.723"></a>
<span class="sourceLineNo">724</span>                                }<a name="line.724"></a>
<span class="sourceLineNo">725</span>                        } else {<a name="line.725"></a>
<span class="sourceLineNo">726</span>                                final double db = bds.getElementDoubleAbs(bOffset);<a name="line.726"></a>
<span class="sourceLineNo">727</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<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>                                        }<a name="line.730"></a>
<span class="sourceLineNo">731</span>                                } else {<a name="line.731"></a>
<span class="sourceLineNo">732</span>                                        final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.732"></a>
<span class="sourceLineNo">733</span>                                        while (it.hasNext()) {<a name="line.733"></a>
<span class="sourceLineNo">734</span>                                                data[it.index]     -= db;<a name="line.734"></a>
<span class="sourceLineNo">735</span>                                                data[it.index + 1] -= vi;<a name="line.735"></a>
<span class="sourceLineNo">736</span>                                        }<a name="line.736"></a>
<span class="sourceLineNo">737</span>                                }<a name="line.737"></a>
<span class="sourceLineNo">738</span>                        }<a name="line.738"></a>
<span class="sourceLineNo">739</span>                } else {<a name="line.739"></a>
<span class="sourceLineNo">740</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.740"></a>
<span class="sourceLineNo">741</span>                        it.setOutputDouble(!useLong);<a name="line.741"></a>
<span class="sourceLineNo">742</span>                        if (useLong) { // note no complex longs<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.bLong;<a name="line.744"></a>
<span class="sourceLineNo">745</span>                                }<a name="line.745"></a>
<span class="sourceLineNo">746</span>                        } else {<a name="line.746"></a>
<span class="sourceLineNo">747</span>                                if (bds.isComplex()) {<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>                                                data[it.aIndex + 1] -= bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.750"></a>
<span class="sourceLineNo">751</span>                                        }<a name="line.751"></a>
<span class="sourceLineNo">752</span>                                } else {<a name="line.752"></a>
<span class="sourceLineNo">753</span>                                        while (it.hasNext()) {<a name="line.753"></a>
<span class="sourceLineNo">754</span>                                                data[it.aIndex] -= it.bDouble;<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>                        }<a name="line.757"></a>
<span class="sourceLineNo">758</span>                }<a name="line.758"></a>
<span class="sourceLineNo">759</span>                return this;<a name="line.759"></a>
<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>        @Override<a name="line.762"></a>
<span class="sourceLineNo">763</span>        public ComplexFloatDataset imultiply(final Object b) {<a name="line.763"></a>
<span class="sourceLineNo">764</span>                setDirty();<a name="line.764"></a>
<span class="sourceLineNo">765</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.765"></a>
<span class="sourceLineNo">766</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.766"></a>
<span class="sourceLineNo">767</span>                if (bds.getSize() == 1) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>                        final IndexIterator it = getIterator();<a name="line.768"></a>
<span class="sourceLineNo">769</span>                        final int bOffset = bds.getOffset();<a name="line.769"></a>
<span class="sourceLineNo">770</span>                        if (useLong) { // note no complex longs<a name="line.770"></a>
<span class="sourceLineNo">771</span>                                final long r2 = bds.getElementLongAbs(bOffset);<a name="line.771"></a>
<span class="sourceLineNo">772</span>                                while (it.hasNext()) {<a name="line.772"></a>
<span class="sourceLineNo">773</span>                                        data[it.index]     *= r2;<a name="line.773"></a>
<span class="sourceLineNo">774</span>                                        data[it.index + 1] *= r2;<a name="line.774"></a>
<span class="sourceLineNo">775</span>                                }<a name="line.775"></a>
<span class="sourceLineNo">776</span>                        } else {<a name="line.776"></a>
<span class="sourceLineNo">777</span>                                final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.777"></a>
<span class="sourceLineNo">778</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.778"></a>
<span class="sourceLineNo">779</span>                                        while (it.hasNext()) {<a name="line.779"></a>
<span class="sourceLineNo">780</span>                                                data[it.index]     *= r2;<a name="line.780"></a>
<span class="sourceLineNo">781</span>                                                data[it.index + 1] *= r2;<a name="line.781"></a>
<span class="sourceLineNo">782</span>                                        }<a name="line.782"></a>
<span class="sourceLineNo">783</span>                                } else {<a name="line.783"></a>
<span class="sourceLineNo">784</span>                                        final double i2 = bds.getElementDoubleAbs(bOffset + 1);<a name="line.784"></a>
<span class="sourceLineNo">785</span>                                        while (it.hasNext()) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>                                                double r1 = data[it.index];<a name="line.786"></a>
<span class="sourceLineNo">787</span>                                                double i1 = data[it.index + 1];<a name="line.787"></a>
<span class="sourceLineNo">788</span>                                                data[it.index]     = (float) (r1*r2 - i1*i2); // ADD_CAST<a name="line.788"></a>
<span class="sourceLineNo">789</span>                                                data[it.index + 1] = (float) (r1*i2 + i1*r2); // ADD_CAST<a name="line.789"></a>
<span class="sourceLineNo">790</span>                                        }<a name="line.790"></a>
<span class="sourceLineNo">791</span>                                }<a name="line.791"></a>
<span class="sourceLineNo">792</span>                        }<a name="line.792"></a>
<span class="sourceLineNo">793</span>                } else {<a name="line.793"></a>
<span class="sourceLineNo">794</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.794"></a>
<span class="sourceLineNo">795</span>                        it.setOutputDouble(!useLong);<a name="line.795"></a>
<span class="sourceLineNo">796</span>                        if (useLong) { // note no complex longs<a name="line.796"></a>
<span class="sourceLineNo">797</span>                                while (it.hasNext()) {<a name="line.797"></a>
<span class="sourceLineNo">798</span>                                        data[it.aIndex]     *= it.bDouble;<a name="line.798"></a>
<span class="sourceLineNo">799</span>                                        data[it.aIndex + 1] *= it.bDouble;<a name="line.799"></a>
<span class="sourceLineNo">800</span>                                }<a name="line.800"></a>
<span class="sourceLineNo">801</span>                        } else {<a name="line.801"></a>
<span class="sourceLineNo">802</span>                                if (bds.isComplex()) {<a name="line.802"></a>
<span class="sourceLineNo">803</span>                                        while (it.hasNext()) {<a name="line.803"></a>
<span class="sourceLineNo">804</span>                                                double r1 = it.aDouble;<a name="line.804"></a>
<span class="sourceLineNo">805</span>                                                double r2 = it.bDouble;<a name="line.805"></a>
<span class="sourceLineNo">806</span>                                                double i1 = data[it.aIndex + 1];<a name="line.806"></a>
<span class="sourceLineNo">807</span>                                                double i2 = bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.807"></a>
<span class="sourceLineNo">808</span>                                                data[it.aIndex]     = (float) (r1*r2 - i1*i2); // ADD_CAST<a name="line.808"></a>
<span class="sourceLineNo">809</span>                                                data[it.aIndex + 1] = (float) (r1*i2 + i1*r2); // ADD_CAST<a name="line.809"></a>
<span class="sourceLineNo">810</span>                                        }<a name="line.810"></a>
<span class="sourceLineNo">811</span>                                } else {<a name="line.811"></a>
<span class="sourceLineNo">812</span>                                        while (it.hasNext()) {<a name="line.812"></a>
<span class="sourceLineNo">813</span>                                                data[it.aIndex]     *= it.bDouble;<a name="line.813"></a>
<span class="sourceLineNo">814</span>                                                data[it.aIndex + 1] *= it.bDouble;<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>                        }<a name="line.817"></a>
<span class="sourceLineNo">818</span>                }<a name="line.818"></a>
<span class="sourceLineNo">819</span>                return this;<a name="line.819"></a>
<span class="sourceLineNo">820</span>        }<a name="line.820"></a>
<span class="sourceLineNo">821</span><a name="line.821"></a>
<span class="sourceLineNo">822</span>        @Override<a name="line.822"></a>
<span class="sourceLineNo">823</span>        public ComplexFloatDataset idivide(final Object b) {<a name="line.823"></a>
<span class="sourceLineNo">824</span>                setDirty();<a name="line.824"></a>
<span class="sourceLineNo">825</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.825"></a>
<span class="sourceLineNo">826</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.826"></a>
<span class="sourceLineNo">827</span>                if (bds.getSize() == 1) {<a name="line.827"></a>
<span class="sourceLineNo">828</span>                        final IndexIterator it = getIterator();<a name="line.828"></a>
<span class="sourceLineNo">829</span>                        final int bOffset = bds.getOffset();<a name="line.829"></a>
<span class="sourceLineNo">830</span>                        if (useLong) { // note no complex longs<a name="line.830"></a>
<span class="sourceLineNo">831</span>                                final long r2 = bds.getElementLongAbs(bOffset);<a name="line.831"></a>
<span class="sourceLineNo">832</span>                                while (it.hasNext()) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>                                        data[it.index]     /= r2;<a name="line.833"></a>
<span class="sourceLineNo">834</span>                                        data[it.index + 1] /= r2;<a name="line.834"></a>
<span class="sourceLineNo">835</span>                                }<a name="line.835"></a>
<span class="sourceLineNo">836</span>                        } else {<a name="line.836"></a>
<span class="sourceLineNo">837</span>                                final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.837"></a>
<span class="sourceLineNo">838</span>                                if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.838"></a>
<span class="sourceLineNo">839</span>                                        while (it.hasNext()) {<a name="line.839"></a>
<span class="sourceLineNo">840</span>                                                data[it.index]     /= r2;<a name="line.840"></a>
<span class="sourceLineNo">841</span>                                                data[it.index + 1] /= r2;<a name="line.841"></a>
<span class="sourceLineNo">842</span>                                        }<a name="line.842"></a>
<span class="sourceLineNo">843</span>                                } else {<a name="line.843"></a>
<span class="sourceLineNo">844</span>                                        final double i2 = bds.getElementDoubleAbs(bOffset + 1);<a name="line.844"></a>
<span class="sourceLineNo">845</span>                                        if (Math.abs(r2) &lt; Math.abs(i2)) {<a name="line.845"></a>
<span class="sourceLineNo">846</span>                                                double q = r2/i2;<a name="line.846"></a>
<span class="sourceLineNo">847</span>                                                double den = r2*q + i2;<a name="line.847"></a>
<span class="sourceLineNo">848</span>                                                while (it.hasNext()) {<a name="line.848"></a>
<span class="sourceLineNo">849</span>                                                        double r1 = data[it.index];<a name="line.849"></a>
<span class="sourceLineNo">850</span>                                                        double i1 = data[it.index + 1];<a name="line.850"></a>
<span class="sourceLineNo">851</span>                                                        data[it.index]     = (float) ((r1*q + i1) / den); // ADD_CAST<a name="line.851"></a>
<span class="sourceLineNo">852</span>                                                        data[it.index + 1] = (float) ((i1*q - r1) / den); // ADD_CAST<a name="line.852"></a>
<span class="sourceLineNo">853</span>                                                }<a name="line.853"></a>
<span class="sourceLineNo">854</span>                                        } else {<a name="line.854"></a>
<span class="sourceLineNo">855</span>                                                double q = i2/r2;<a name="line.855"></a>
<span class="sourceLineNo">856</span>                                                double den = i2*q + r2;<a name="line.856"></a>
<span class="sourceLineNo">857</span>                                                if (den == 0) {<a name="line.857"></a>
<span class="sourceLineNo">858</span>                                                        while (it.hasNext()) {<a name="line.858"></a>
<span class="sourceLineNo">859</span>                                                                data[it.index]     = Float.NaN; // CLASS_TYPE<a name="line.859"></a>
<span class="sourceLineNo">860</span>                                                                data[it.index + 1] = Float.NaN; // CLASS_TYPE<a name="line.860"></a>
<span class="sourceLineNo">861</span>                                                        }<a name="line.861"></a>
<span class="sourceLineNo">862</span>                                                } else {<a name="line.862"></a>
<span class="sourceLineNo">863</span>                                                        while (it.hasNext()) {<a name="line.863"></a>
<span class="sourceLineNo">864</span>                                                                double r1 = data[it.index];<a name="line.864"></a>
<span class="sourceLineNo">865</span>                                                                double i1 = data[it.index + 1];<a name="line.865"></a>
<span class="sourceLineNo">866</span>                                                                data[it.index]     = (float) ((i1 * q + r1) / den); // ADD_CAST<a name="line.866"></a>
<span class="sourceLineNo">867</span>                                                                data[it.index + 1] = (float) ((i1 - r1 * q) / den); // ADD_CAST<a name="line.867"></a>
<span class="sourceLineNo">868</span>                                                        }<a name="line.868"></a>
<span class="sourceLineNo">869</span>                                                }<a name="line.869"></a>
<span class="sourceLineNo">870</span>                                        }<a name="line.870"></a>
<span class="sourceLineNo">871</span>                                }<a name="line.871"></a>
<span class="sourceLineNo">872</span>                        }<a name="line.872"></a>
<span class="sourceLineNo">873</span>                } else {<a name="line.873"></a>
<span class="sourceLineNo">874</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.874"></a>
<span class="sourceLineNo">875</span>                        it.setOutputDouble(!useLong);<a name="line.875"></a>
<span class="sourceLineNo">876</span>                        if (useLong) {<a name="line.876"></a>
<span class="sourceLineNo">877</span>                                while (it.hasNext()) {<a name="line.877"></a>
<span class="sourceLineNo">878</span>                                        data[it.aIndex]     /= it.bLong;<a name="line.878"></a>
<span class="sourceLineNo">879</span>                                        data[it.aIndex + 1] /= it.bLong;<a name="line.879"></a>
<span class="sourceLineNo">880</span>                                }<a name="line.880"></a>
<span class="sourceLineNo">881</span>                        } else {<a name="line.881"></a>
<span class="sourceLineNo">882</span>                                if (bds.isComplex()) {<a name="line.882"></a>
<span class="sourceLineNo">883</span>                                        while (it.hasNext()) {<a name="line.883"></a>
<span class="sourceLineNo">884</span>                                                double r1 = it.aDouble;<a name="line.884"></a>
<span class="sourceLineNo">885</span>                                                double r2 = it.bDouble;<a name="line.885"></a>
<span class="sourceLineNo">886</span>                                                double i1 = data[it.aIndex + 1];<a name="line.886"></a>
<span class="sourceLineNo">887</span>                                                double i2 = bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.887"></a>
<span class="sourceLineNo">888</span>                                                if (Math.abs(r2) &lt; Math.abs(i2)) {<a name="line.888"></a>
<span class="sourceLineNo">889</span>                                                        double q = r2/i2;<a name="line.889"></a>
<span class="sourceLineNo">890</span>                                                        double den = r2*q + i2;<a name="line.890"></a>
<span class="sourceLineNo">891</span>                                                        data[it.aIndex]     = (float) ((r1*q + i1) / den); // ADD_CAST<a name="line.891"></a>
<span class="sourceLineNo">892</span>                                                        data[it.aIndex + 1] = (float) ((i1*q - r1) / den); // ADD_CAST<a name="line.892"></a>
<span class="sourceLineNo">893</span>                                                } else {<a name="line.893"></a>
<span class="sourceLineNo">894</span>                                                        double q = i2/r2;<a name="line.894"></a>
<span class="sourceLineNo">895</span>                                                        double den = i2*q + r2;<a name="line.895"></a>
<span class="sourceLineNo">896</span>                                                        if (den == 0) {<a name="line.896"></a>
<span class="sourceLineNo">897</span>                                                                data[it.aIndex]     = Float.NaN; // CLASS_TYPE<a name="line.897"></a>
<span class="sourceLineNo">898</span>                                                                data[it.aIndex + 1] = Float.NaN; // CLASS_TYPE<a name="line.898"></a>
<span class="sourceLineNo">899</span>                                                        } else {<a name="line.899"></a>
<span class="sourceLineNo">900</span>                                                                data[it.aIndex]     = (float) ((i1 * q + r1) / den); // ADD_CAST<a name="line.900"></a>
<span class="sourceLineNo">901</span>                                                                data[it.aIndex + 1] = (float) ((i1 - r1 * q) / den); // ADD_CAST<a name="line.901"></a>
<span class="sourceLineNo">902</span>                                                        }<a name="line.902"></a>
<span class="sourceLineNo">903</span>                                                }<a name="line.903"></a>
<span class="sourceLineNo">904</span>                                        }<a name="line.904"></a>
<span class="sourceLineNo">905</span>                                } else {<a name="line.905"></a>
<span class="sourceLineNo">906</span>                                        while (it.hasNext()) {<a name="line.906"></a>
<span class="sourceLineNo">907</span>                                                data[it.aIndex]     /= it.bDouble;<a name="line.907"></a>
<span class="sourceLineNo">908</span>                                                data[it.aIndex + 1] /= it.bDouble;<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>                        }<a name="line.911"></a>
<span class="sourceLineNo">912</span>                }<a name="line.912"></a>
<span class="sourceLineNo">913</span>                return this;<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 iremainder(final Object b) {<a name="line.917"></a>
<span class="sourceLineNo">918</span>                throw new UnsupportedOperationException("Unsupported method for class");<a name="line.918"></a>
<span class="sourceLineNo">919</span>        }<a name="line.919"></a>
<span class="sourceLineNo">920</span><a name="line.920"></a>
<span class="sourceLineNo">921</span>        @Override<a name="line.921"></a>
<span class="sourceLineNo">922</span>        public ComplexFloatDataset ipower(final Object b) {<a name="line.922"></a>
<span class="sourceLineNo">923</span>                setDirty();<a name="line.923"></a>
<span class="sourceLineNo">924</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.924"></a>
<span class="sourceLineNo">925</span>                if (bds.getSize() == 1) {<a name="line.925"></a>
<span class="sourceLineNo">926</span>                        final IndexIterator it = getIterator();<a name="line.926"></a>
<span class="sourceLineNo">927</span>                        final int bOffset = bds.getOffset();<a name="line.927"></a>
<span class="sourceLineNo">928</span>                        final double r2 = bds.getElementDoubleAbs(bOffset);<a name="line.928"></a>
<span class="sourceLineNo">929</span>                        if (!bds.isComplex() || bds.getElementDoubleAbs(bOffset + 1) == 0) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>                                while (it.hasNext()) {<a name="line.930"></a>
<span class="sourceLineNo">931</span>                                        final Complex zd = new Complex(data[it.index], data[it.index + 1]).pow(r2);<a name="line.931"></a>
<span class="sourceLineNo">932</span>                                        data[it.index]     = (float) zd.getReal(); // ADD_CAST<a name="line.932"></a>
<span class="sourceLineNo">933</span>                                        data[it.index + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.933"></a>
<span class="sourceLineNo">934</span>                                }<a name="line.934"></a>
<span class="sourceLineNo">935</span>                        } else {<a name="line.935"></a>
<span class="sourceLineNo">936</span>                                final Complex zv = new Complex(r2, bds.getElementDoubleAbs(bOffset + 1));<a name="line.936"></a>
<span class="sourceLineNo">937</span>                                while (it.hasNext()) {<a name="line.937"></a>
<span class="sourceLineNo">938</span>                                        final Complex zd = new Complex(data[it.index], data[it.index + 1]).pow(zv);<a name="line.938"></a>
<span class="sourceLineNo">939</span>                                        data[it.index]     = (float) zd.getReal(); // ADD_CAST<a name="line.939"></a>
<span class="sourceLineNo">940</span>                                        data[it.index + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.940"></a>
<span class="sourceLineNo">941</span>                                }<a name="line.941"></a>
<span class="sourceLineNo">942</span>                        }<a name="line.942"></a>
<span class="sourceLineNo">943</span>                } else {<a name="line.943"></a>
<span class="sourceLineNo">944</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.944"></a>
<span class="sourceLineNo">945</span>                        it.setOutputDouble(true);<a name="line.945"></a>
<span class="sourceLineNo">946</span>                        if (bds.isComplex()) {<a name="line.946"></a>
<span class="sourceLineNo">947</span>                                while (it.hasNext()) {<a name="line.947"></a>
<span class="sourceLineNo">948</span>                                        final Complex zv = new Complex(it.bDouble, bds.getElementDoubleAbs(it.bIndex + 1));<a name="line.948"></a>
<span class="sourceLineNo">949</span>                                        final Complex zd = new Complex(it.aDouble, data[it.aIndex + 1]).pow(zv);<a name="line.949"></a>
<span class="sourceLineNo">950</span>                                        data[it.aIndex]     = (float) zd.getReal(); // ADD_CAST<a name="line.950"></a>
<span class="sourceLineNo">951</span>                                        data[it.aIndex + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.951"></a>
<span class="sourceLineNo">952</span>                                }<a name="line.952"></a>
<span class="sourceLineNo">953</span>                        } else {<a name="line.953"></a>
<span class="sourceLineNo">954</span>                                while (it.hasNext()) {<a name="line.954"></a>
<span class="sourceLineNo">955</span>                                        final Complex zd = new Complex(it.aDouble, data[it.aIndex + 1]).pow(it.bDouble);<a name="line.955"></a>
<span class="sourceLineNo">956</span>                                        data[it.aIndex]     = (float) zd.getReal(); // ADD_CAST<a name="line.956"></a>
<span class="sourceLineNo">957</span>                                        data[it.aIndex + 1] = (float) zd.getImaginary(); // ADD_CAST<a name="line.957"></a>
<span class="sourceLineNo">958</span>                                }<a name="line.958"></a>
<span class="sourceLineNo">959</span>                        }<a name="line.959"></a>
<span class="sourceLineNo">960</span>                }<a name="line.960"></a>
<span class="sourceLineNo">961</span>                return this;<a name="line.961"></a>
<span class="sourceLineNo">962</span>        }<a name="line.962"></a>
<span class="sourceLineNo">963</span><a name="line.963"></a>
<span class="sourceLineNo">964</span>        @Override<a name="line.964"></a>
<span class="sourceLineNo">965</span>        public double residual(final Object b, Dataset w, boolean ignoreNaNs) {<a name="line.965"></a>
<span class="sourceLineNo">966</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.966"></a>
<span class="sourceLineNo">967</span>                final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.967"></a>
<span class="sourceLineNo">968</span>                it.setOutputDouble(true);<a name="line.968"></a>
<span class="sourceLineNo">969</span>                double sum = 0;<a name="line.969"></a>
<span class="sourceLineNo">970</span>                double comp = 0;<a name="line.970"></a>
<span class="sourceLineNo">971</span>                final int bis = bds.getElementsPerItem();<a name="line.971"></a>
<span class="sourceLineNo">972</span><a name="line.972"></a>
<span class="sourceLineNo">973</span>                if (bis == 1) {<a name="line.973"></a>
<span class="sourceLineNo">974</span>                        if (w == null) {<a name="line.974"></a>
<span class="sourceLineNo">975</span>                                while (it.hasNext()) {<a name="line.975"></a>
<span class="sourceLineNo">976</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.976"></a>
<span class="sourceLineNo">977</span>                                        double diffi = data[it.aIndex + 1];<a name="line.977"></a>
<span class="sourceLineNo">978</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.978"></a>
<span class="sourceLineNo">979</span>                                                continue;<a name="line.979"></a>
<span class="sourceLineNo">980</span>                                        }<a name="line.980"></a>
<span class="sourceLineNo">981</span>                                        double err = diffr * diffr - comp;<a name="line.981"></a>
<span class="sourceLineNo">982</span>                                        double 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>                                        err = diffi * diffi - comp;<a name="line.986"></a>
<span class="sourceLineNo">987</span>                                        temp = sum + err;<a name="line.987"></a>
<span class="sourceLineNo">988</span>                                        comp = (temp - sum) - err;<a name="line.988"></a>
<span class="sourceLineNo">989</span>                                        sum = temp;<a name="line.989"></a>
<span class="sourceLineNo">990</span>                                }<a name="line.990"></a>
<span class="sourceLineNo">991</span>                        } else {<a name="line.991"></a>
<span class="sourceLineNo">992</span>                                IndexIterator itw = w.getIterator();<a name="line.992"></a>
<span class="sourceLineNo">993</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.993"></a>
<span class="sourceLineNo">994</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.994"></a>
<span class="sourceLineNo">995</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.995"></a>
<span class="sourceLineNo">996</span>                                        double diffi = data[it.aIndex + 1];<a name="line.996"></a>
<span class="sourceLineNo">997</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.997"></a>
<span class="sourceLineNo">998</span>                                                continue;<a name="line.998"></a>
<span class="sourceLineNo">999</span>                                        }<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                                        double err = diffr * diffr * dw - comp;<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                                        double 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>                                        err = diffi * diffi * dw - comp;<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                                        temp = sum + err;<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                                        comp = (temp - sum) - err;<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                                        sum = temp;<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                                }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                        }<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                } else {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                        if (w == null) {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                                while (it.hasNext()) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                                        double diffi = data[it.aIndex] - bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                                                continue;<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                                        }<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                                        double err = diffr * diffr - comp;<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                                        double 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>                                        err = diffi * diffi - comp;<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                                        temp = sum + err;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                                        comp = (temp - sum) - err;<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                                        sum = temp;<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                                }<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>                        } else {<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                                IndexIterator itw = w.getIterator();<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                                        double diffr = it.aDouble - it.bDouble;<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                                        double diffi = data[it.aIndex] - bds.getElementDoubleAbs(it.bIndex + 1);<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(diffr) || Double.isNaN(diffi))) {<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                                                continue;<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                                        }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                                        double err = diffr * diffr * dw - comp;<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                                        double 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>                                        err = diffi * diffi * dw - comp;<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                                        temp = sum + err;<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                                        comp = (temp - sum) - err;<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                                        sum = temp;<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>                                }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>                        }<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>                }<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>                return sum;<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>}<a name="line.1052"></a>




























































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