<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<?xml-stylesheet href="./_c74_ref.xsl" type="text/xsl"?>

<!--This is an automatically generated file. DO NOT EDIT THIS FILE DIRECTLY. Rather, use the _ref.xml files found in the 'edits' folder.-->
<c74object name="jit.op" module="jit" category="Jitter Compositing, Jitter Math">
	<digest>
		Apply binary or unary operators
	</digest>
	<description>
		The <o>jit.op</o> object applies either a binary operator to two input matrices, or a unary operator to the left input matrix. A different operator may be specified for each plane, or a scalar may be specified via the <at>val</at> attribute as an alternate to using a second matrix.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74
		</metadata>
		<metadata name="tag">
			Jitter
		</metadata>
		<metadata name="tag">
			Jitter Compositing
		</metadata>
		<metadata name="tag">
			Jitter Math
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="matrix">
			<digest>
				in
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="1" type="matrix">
			<digest>
				in2
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="matrix">
			<digest>
				out
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
		<outlet id="1" type="matrix">
			<digest>
				dumpout
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
	</outletlist>
	<!--MOP-->
	<mop matrixinputcount="2" matrixoutputcount="1">
		<matrixinput name="in2" planelink="1" typelink="1" dimlink="1" minplanecount="1" maxplanecount="32" mindimcount="1" maxdimcount="32" ioproc="resamp">
			<types>
				char long float32 float64
			</types>
		</matrixinput>
		<matrixoutput name="out" planelink="1" typelink="1" dimlink="1" minplanecount="1" maxplanecount="32" mindimcount="1" maxdimcount="32">
			<types>
				char long float32 float64
			</types>
		</matrixoutput>
	</mop>
	<!--MESSAGES-->
	<methodlist>
		<method name="int">
			<arglist />
			<digest>
				Set a <at>value</at> to <m>int</m>.
			</digest>
			<description>
				Sets a <at>value</at> to <m>int</m>.
			</description>
		</method>
		<method name="float">
			<arglist />
			<digest>
				Set a <at>value</at> to <m>float.</m> 
			</digest>
			<description>
				Sets a <at>value</at> to <m>float.</m> 
			</description>
		</method>
		<method name="list">
			<arglist />
			<digest>
				Set <at>value</at> to <m>list.</m> 
			</digest>
			<description>
				Sets <at>value</at> to <m>list.</m> 
			</description>
		</method>
	</methodlist>
	<jittermethodlist>
		<jittermethod name="bang" />
		<jittermethod name="clear" />
		<jittermethod name="exportattrs" />
		<jittermethod name="exportsummary" />
		<jittermethod name="getattributes" />
		<jittermethod name="getstate" />
		<jittermethod name="jit_matrix" />
		<jittermethod name="importattrs" />
		<jittermethod name="outputmatrix" />
		<jittermethod name="summary" />
	</jittermethodlist>
	<!--ATTRIBUTES-->
	<attributelist>
		<attribute name="op" get="1" set="1" type="symbol" size="32">
			<digest>
				Operator to use
			</digest>
			<description>
				The operator to be used (default = pass) If one operator is specified, it is applied to all planes. If multiple operators are specified, they are applied on a plane by plane basis.
				<p />
				Arithmetic Operators:
				<br />
				<m>pass</m>= pass left input, no operator
				<br />
				<m>*</m>= multiplication (also <m>mult</m>)				<br />
				<m>/</m>= division (also <m>div</m>)				<br />
				<m>+</m>= addition (also <m>add</m>)				<br />
				<m>-</m>= subtraction (also <m>sub</m>)				<br />
				<m>+m</m>= addition modulo (char only) (also <m>addm</m>)				<br />
				<m>-m</m>= subtraction modulo (char only) (also <m>subm</m>)				<br />
				<m>%</m>= modulo (also <m>mod</m>)				<br />
				<m>min</m>= minimum
				<br />
				<m>max</m>= maximum
				<br />
				<m>abs</m>= absolute value (unary)
				<br />
				<m>avg</m>= average
				<br />
				<m>absdiff</m>= absolute value of difference
				<br />
				<m>fold</m>= folding/mirrored modulo (float only)
				<br />
				<m>wrap</m>= wrapping/positive modulo (float only)
				<br />
				<m>!pass</m>= pass right input, no operator
				<br />
				<m>!/</m>= right input divided by left input (flipped)
				<br />
				<m>!-</m>= right input minus left input (flipped)
				<br />
				<m>!%</m>= right input modulo left input (flipped)
				<br />
				<m>ignore</m>= leave previous output value
				<br />
				<p />
				Trigonometric Operators: (float32/float64 only, unary except atan2)
				<br />
				<m>sin</m>= sine
				<br />
				<m>cos</m>= cosine
				<br />
				<m>tan</m>= tangent
				<br />
				<m>asin</m>= arcsine
				<br />
				<m>acos</m>= arccosine
				<br />
				<m>atan</m>= arctangent
				<br />
				<m>atan2</m>= arctangent (binary)
				<br />
				<m>sinh</m>= hyperbolic sine
				<br />
				<m>cosh</m>= hyperbolic cosine
				<br />
				<m>tanh</m>= hyperbolic tangent
				<br />
				<m>asinh</m>= hyperbolic arcsine
				<br />
				<m>acosh</m>= hyperbolic arccosine
				<br />
				<m>atanh</m>= hyperbolic arctangent
				<br />
				<p />
				Bitwise Operators: (long/char only)
				<br />
				<m>&amp;</m>= bitwise and
				<br />
				<m>|</m>= bitwise or
				<br />
				<m>^</m>= bitwise xor
				<br />
				<m>~</m>= bitwise compliment (unary)
				<br />
				<m>&gt;&gt;</m>= right shift
				<br />
				<m>&lt;&lt;</m>= left shift
				<br />
				<p />
				Logical operators
				<br />
				<m>&amp;&amp;</m>= logical and
				<br />
				<m>||</m>= logical or
				<br />
				<m>!</m>= logical not (unary)
				<br />
				<m>&gt;</m>= greater than
				<br />
				<m>&lt;</m>= less than
				<br />
				<m>&gt;=</m>= greater than or equal to
				<br />
				<m>&lt;=</m>= less than or equal to
				<br />
				<m>==</m>= equal
				<br />
				<m>!=</m>= not equal
				<br />
				<m>&gt;p</m>= greater than (pass)
				<br />
				<m>&lt;p</m>= less than (pass)
				<br />
				<m>&gt;=p</m>= greater than or equal to (pass)
				<br />
				<m>&lt;=p</m>= less than or equal to (pass)
				<br />
				<m>==p</m>= equal (pass)
				<br />
				<m>!=p</m> not equal (pass)
				<br />
				<p />
				Exponential/Logarithmic/Other: (float32/float64 only, unary except hypot and pow)
				<br />
				<m>exp</m>= e to the x
				<br />
				<m>exp2</m>= 2 to the x
				<br />
				<m>ln</m>= log base e
				<br />
				<m>log2</m>= log base 2
				<br />
				<m>log10</m>= log base 10
				<br />
				<m>hypot</m>= hypotenuse (binary)
				<br />
				<m>pow</m>= x to the y (binary)
				<br />
				<m>sqrt</m>= square root
				<br />
				<m>ceil</m>= integer ceiling
				<br />
				<m>floor</m>= integer floor
				<br />
				<m>round</m>= round to nearest integer
				<br />
				<m>trunc</m>= truncate to integer
				<br />
			</description>
			<attributelist>
				<attribute name="enumvals" get="1" set="1" type="atom" size="66">
					<enumlist>
						<enum name="*">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="/">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="+">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="sub">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!/">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!-">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="+m">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="-m">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="%">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!%">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="min">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="max">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="avg">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="abs">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="absdiff">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="pass">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!pass">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="fold">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="wrap">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&amp;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="|">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="^">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="~">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&gt;&gt;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&lt;&lt;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&amp;&amp;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="||">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&gt;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&lt;">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&gt;=">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&lt;=">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="==">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!=">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&gt;p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&lt;p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&gt;=p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="&lt;=p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="==p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="!=p">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="sin">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="cos">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="tan">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="asin">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="acos">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="atan">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="atan2">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="sinh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="cosh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="tanh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="asinh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="acosh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="atanh">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="exp">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="exp2">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="ln">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="log">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="log2">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="log10">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="hypot">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="pow">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="sqrt">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="ceil">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="floor">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="round">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="trunc">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
					</enumlist>
				</attribute>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Op" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="enum" />
			</attributelist>
			<discussion>
				For every jit.op operator, there is a shortcut object that can be used instead following the format jit.OPNAME.  For example, jit.op @op * can simply be written as jit.*.  Similarly jit.op @op cos can be written as jit.cos.  The same pattern can be applied to every jit.op @op operator.
			</discussion>
		</attribute>
		<attribute name="val" get="1" set="1" type="atom" size="32">
			<digest>
				Value to use as right hand operand instead of a matrix
			</digest>
			<description>
				The value to use as right hand operand instead of a matrix (default = 0) If one value is specified it applies to all planes. If multiple values are specified they are applied on a plane by plane basis. <b>IMPORTANT</b>: If the incoming matrix data has <at>type</at>  <m>char</m>, then integers in the range 0-255 are mapped to the floating point data range 0.- .996 (A value of 1. (char 255) is not really 1. That value is not representable in 8-bit fixed point, since it would be 256. Thus, floating point values greater than 1. become 1.0 - 1/256.0, or 0.996).
			</description>
		</attribute>
	</attributelist>
	<jitterattributelist>
		<jitterattribute name="outputmode" />
		<jitterattribute name="adapt" />
		<jitterattribute name="in2_name" />
		<jitterattribute name="in2_type" />
		<jitterattribute name="in2_dim" />
		<jitterattribute name="in2_planecount" />
		<jitterattribute name="out_name" />
		<jitterattribute name="type" />
		<jitterattribute name="dim" />
		<jitterattribute name="planecount" />
	</jitterattributelist>
	<!--EXAMPLE-->
	<examplelist>
		<example img="jit.op.png" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="expr" />
		<seealso name="jit.expr" />
		<seealso name="jit.dimop" />
		<seealso name="jit.planeop" />
		<seealso name="vexpr" />
		<seealso name="jitterchapter03" module="jit" type="tutorial" />
		<seealso name="jitterchapter05" module="jit" type="tutorial" />
		<seealso name="jitterchapter09" module="jit" type="tutorial" />
		<seealso name="jitterchapter18" module="jit" type="tutorial" />
		<seealso name="jitterchapter45" module="jit" type="tutorial">
			Jitter Tutorial 45: Introduction to using Jitter within JavaScript
		</seealso>
	</seealsolist>
</c74object>
