<h2>org.das2.qds.QFunction</h2><p>QFunctions try to recycle as much of the QDataSet interface as possible to
 define functions.  Functions take N parameters as input and result in M parameter
 output.  The N parameters are passed into value as a rank 1 bundle QDataSet, or rank 0 
 dataset when there is just one input.
 The M parameter output is returned in a rank 1 bundle dataset.  The method
 exampleInput returns an example input that allows for discovery of the function.

 Implementations will generally extend AbstractQFunction, which implements
 values() and exampleOutput().
 
 Goals:
 <ul>
 <li> support extra tick labels of axis, which are often the result of SPICE kernel evaluations.
 <li> allow discovery of function, so the system can pick it up and use it.
 <li> allow tabulation and plotting of a function.
 <li> non-linear function optimization.
 </ul></p>
<hr>
<a name="exampleInput"></a>
<h2>exampleInput</h2>
exampleInput(  ) &rarr; <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a>

<p>Discover an example input.  Result is a rank 1 bundle QDataSet.
<blockquote><pre>
QFunction ff= TestFunction();
ff.exampleInput().length();  // how many parameters the function takes
QDataSet bds= ff.exampleInput().property( QDataSet.BUNDLE_0 );
bds.slice(0).property( QDataSet.UNITS )       // function should handle convertible units (e.g. TimeAxes Ephemeris).
bds.slice(0).property( QDataSet.VALID_MIN )   // absolute limits of domain of the function
bds.slice(0).property( QDataSet.VALID_MAX )
bds.slice(0).property( QDataSet.TYPICAL_MIN ) // domain of the function parameter
bds.slice(0).property( QDataSet.TYPICAL_MAX )
bds.slice(0).property( QDataSet.CADENCE ) // granularity of the function parameter
bds.slice(0).property( QDataSet.LABEL )   // label for the parameter
</pre></blockquote>
 slice(0) is the first argument, slice(1) would be the second, etc.
 This would be a bundle.
 
 Note, for functions that have only one argument, like F(T)&rarr;[R,MLT,MLAT], this
 may return a rank 0 dataset.  Clients should pass a dataset to the value method a
 dataset with the same geometry.</p>

<h3>Returns:</h3>
rank 1 bundle of N elements, or rank 0 for functions when the function has just one parameter.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=exampleInput&unscoped_q=exampleInput">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/das2/qds/QFunction.md">[view on GitHub]</a>
 <a href="http://www-pw.physics.uiowa.edu/~jbf/autoplot/javadoc2018/org/das2/qds/QFunction.html#exampleInput">[view on old javadoc]</a>
 <a href="https://sourceforge.net/p/autoplot/code/HEAD/tree/autoplot/trunk/QDataSet/src/org/das2/qds/QFunction.java#l73">[view source]</a>
<br>
<br>
<hr>
<a name="exampleOutput"></a>
<h2>exampleOutput</h2>
exampleOutput(  ) &rarr; <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a>

<p>Discover an example of output.  Result is a rank 1 bundle QDataSet.  This
 was introduced to support QFunctions where it would be expensive to calculate
 an input that would result in a meaningful output.  It's assumed that many
 implementations will simply be:
<blockquote><pre>
value( exampleInput() );
</pre></blockquote></p>

<h3>Returns:</h3>
rank 1 bundle of M elements.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=exampleOutput&unscoped_q=exampleOutput">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/das2/qds/QFunction.md">[view on GitHub]</a>
 <a href="http://www-pw.physics.uiowa.edu/~jbf/autoplot/javadoc2018/org/das2/qds/QFunction.html#exampleOutput">[view on old javadoc]</a>
 <a href="https://sourceforge.net/p/autoplot/code/HEAD/tree/autoplot/trunk/QDataSet/src/org/das2/qds/QFunction.java#l85">[view source]</a>
<br>
<br>
<hr>
<a name="value"></a>
<h2>value</h2>
value( <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a> parm ) &rarr; <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a>

<p>Evaluate the function at the location.
 A rank 1 dataset of N parameters is passed in, and a
 rank 1 dataset of M parameters is returned.  It's presumed that this
 is calculated in interactive time (1/30sec) for GUI applications like
 attaching ephemeris ticks to an axis (note no monitor parameter to indicate feedback).</p>

<h3>Parameters</h3>
parm - rank 1 bundle of N elements, or rank 2 array of such.

<h3>Returns:</h3>
rank 1 bundle of M elements, or rank 2 array of such.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=value&unscoped_q=value">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/das2/qds/QFunction.md">[view on GitHub]</a>
 <a href="http://www-pw.physics.uiowa.edu/~jbf/autoplot/javadoc2018/org/das2/qds/QFunction.html#value">[view on old javadoc]</a>
 <a href="https://sourceforge.net/p/autoplot/code/HEAD/tree/autoplot/trunk/QDataSet/src/org/das2/qds/QFunction.java#l38">[view source]</a>
<br>
<br>
<hr>
<a name="values"></a>
<h2>values</h2>
values( <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a> parm ) &rarr; <a href='http://www-pw.physics.uiowa.edu/~jbf/autoplot/doc/org/das2/qds/QDataSet.html'>QDataSet</a>

<p>Evaluate the function at the locations in parm.
 A rank 2 dataset of CxN parameters is passed in, and a
 rank 1 dataset of CxM parameters is returned, where C is the number
 of repeated value operations.  This is useful for when it's expensive
 to look up the first value.</p>

<h3>Parameters</h3>
parm - rank 2 of C bundles of N elements.  rank 1 parm is acceptable if the exampleInput result is rank 0.

<h3>Returns:</h3>
rank 2 of C bundles of M elements, or rank 2 array of such.
<br><br>
<a href="https://github.com/autoplot/dev/search?q=values&unscoped_q=values">[search for examples]</a>
 <a href="https://github.com/autoplot/documentation/tree/master/javadoc/org/das2/qds/QFunction.md">[view on GitHub]</a>
 <a href="http://www-pw.physics.uiowa.edu/~jbf/autoplot/javadoc2018/org/das2/qds/QFunction.html#values">[view on old javadoc]</a>
 <a href="https://sourceforge.net/p/autoplot/code/HEAD/tree/autoplot/trunk/QDataSet/src/org/das2/qds/QFunction.java#l49">[view source]</a>
<br>
<br>