NAME
PDL::Ops - Fundamental mathematical operators
DESCRIPTION
This module provides the functions used by PDL to overload the basic mathematical operators (+ - / *
etc.) and functions (sin sqrt
etc.)
It also includes the function log10
, which should be a perl function so that we can overload it!
Matrix multiplication (the operator x
) is handled by the module PDL::Primitive.
SYNOPSIS
none
FUNCTIONS
plus
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a + $b; # overloads the Perl '+' operator
$a += $b;
$c = plus($a, $b); # using default value of swap=0
$c = plus($a, $b, $swap); # overriding default
plus($a, $b, $c, $swap); # all arguments given
$c = $a->plus($b); # method call
$c = $a->plus($b, $swap);
$a->plus($b, $c, $swap);
$a->inplace->plus($b,$swap); # can be used inplace
plus($a->inplace,$b,$swap);
add two ndarrays
Broadcasts over its inputs.
plus
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
mult
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a * $b; # overloads the Perl '*' operator
$a *= $b;
$c = mult($a, $b); # using default value of swap=0
$c = mult($a, $b, $swap); # overriding default
mult($a, $b, $c, $swap); # all arguments given
$c = $a->mult($b); # method call
$c = $a->mult($b, $swap);
$a->mult($b, $c, $swap);
$a->inplace->mult($b,$swap); # can be used inplace
mult($a->inplace,$b,$swap);
multiply two ndarrays
Broadcasts over its inputs.
mult
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
minus
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a - $b; # overloads the Perl '-' operator
$a -= $b;
$c = minus($a, $b); # using default value of swap=0
$c = minus($a, $b, $swap); # overriding default
minus($a, $b, $c, $swap); # all arguments given
$c = $a->minus($b); # method call
$c = $a->minus($b, $swap);
$a->minus($b, $c, $swap);
$a->inplace->minus($b,$swap); # can be used inplace
minus($a->inplace,$b,$swap);
subtract two ndarrays
Broadcasts over its inputs.
minus
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
divide
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a / $b; # overloads the Perl '/' operator
$a /= $b;
$c = divide($a, $b); # using default value of swap=0
$c = divide($a, $b, $swap); # overriding default
divide($a, $b, $c, $swap); # all arguments given
$c = $a->divide($b); # method call
$c = $a->divide($b, $swap);
$a->divide($b, $c, $swap);
$a->inplace->divide($b,$swap); # can be used inplace
divide($a->inplace,$b,$swap);
divide two ndarrays
Broadcasts over its inputs.
divide
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
gt
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a > $b; # overloads the Perl '>' operator
$c = gt($a, $b); # using default value of swap=0
$c = gt($a, $b, $swap); # overriding default
gt($a, $b, $c, $swap); # all arguments given
$c = $a->gt($b); # method call
$c = $a->gt($b, $swap);
$a->gt($b, $c, $swap);
$a->inplace->gt($b,$swap); # can be used inplace
gt($a->inplace,$b,$swap);
the binary > (greater than) operation
Broadcasts over its inputs.
gt
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
lt
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a < $b; # overloads the Perl '<' operator
$c = lt($a, $b); # using default value of swap=0
$c = lt($a, $b, $swap); # overriding default
lt($a, $b, $c, $swap); # all arguments given
$c = $a->lt($b); # method call
$c = $a->lt($b, $swap);
$a->lt($b, $c, $swap);
$a->inplace->lt($b,$swap); # can be used inplace
lt($a->inplace,$b,$swap);
the binary < (less than) operation
Broadcasts over its inputs.
lt
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
le
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a <= $b; # overloads the Perl '<=' operator
$c = le($a, $b); # using default value of swap=0
$c = le($a, $b, $swap); # overriding default
le($a, $b, $c, $swap); # all arguments given
$c = $a->le($b); # method call
$c = $a->le($b, $swap);
$a->le($b, $c, $swap);
$a->inplace->le($b,$swap); # can be used inplace
le($a->inplace,$b,$swap);
the binary <= (less equal) operation
Broadcasts over its inputs.
le
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
ge
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a >= $b; # overloads the Perl '>=' operator
$c = ge($a, $b); # using default value of swap=0
$c = ge($a, $b, $swap); # overriding default
ge($a, $b, $c, $swap); # all arguments given
$c = $a->ge($b); # method call
$c = $a->ge($b, $swap);
$a->ge($b, $c, $swap);
$a->inplace->ge($b,$swap); # can be used inplace
ge($a->inplace,$b,$swap);
the binary >= (greater equal) operation
Broadcasts over its inputs.
ge
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
eq
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a == $b; # overloads the Perl '==' operator
$c = eq($a, $b); # using default value of swap=0
$c = eq($a, $b, $swap); # overriding default
eq($a, $b, $c, $swap); # all arguments given
$c = $a->eq($b); # method call
$c = $a->eq($b, $swap);
$a->eq($b, $c, $swap);
$a->inplace->eq($b,$swap); # can be used inplace
eq($a->inplace,$b,$swap);
binary equal to operation (==
)
Broadcasts over its inputs.
eq
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
ne
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$c = $a != $b; # overloads the Perl '!=' operator
$c = ne($a, $b); # using default value of swap=0
$c = ne($a, $b, $swap); # overriding default
ne($a, $b, $c, $swap); # all arguments given
$c = $a->ne($b); # method call
$c = $a->ne($b, $swap);
$a->ne($b, $c, $swap);
$a->inplace->ne($b,$swap); # can be used inplace
ne($a->inplace,$b,$swap);
binary not equal to operation (!=
)
Broadcasts over its inputs.
ne
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
shiftleft
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$c = $a << $b; # overloads the Perl '<<' operator
$a <<= $b;
$c = shiftleft($a, $b); # using default value of swap=0
$c = shiftleft($a, $b, $swap); # overriding default
shiftleft($a, $b, $c, $swap); # all arguments given
$c = $a->shiftleft($b); # method call
$c = $a->shiftleft($b, $swap);
$a->shiftleft($b, $c, $swap);
$a->inplace->shiftleft($b,$swap); # can be used inplace
shiftleft($a->inplace,$b,$swap);
bitwise leftshift $a
by $b
Broadcasts over its inputs.
shiftleft
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
shiftright
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$c = $a >> $b; # overloads the Perl '>>' operator
$a >>= $b;
$c = shiftright($a, $b); # using default value of swap=0
$c = shiftright($a, $b, $swap); # overriding default
shiftright($a, $b, $c, $swap); # all arguments given
$c = $a->shiftright($b); # method call
$c = $a->shiftright($b, $swap);
$a->shiftright($b, $c, $swap);
$a->inplace->shiftright($b,$swap); # can be used inplace
shiftright($a->inplace,$b,$swap);
bitwise rightshift $a
by $b
Broadcasts over its inputs.
shiftright
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
or2
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$c = $a | $b; # overloads the Perl '|' operator
$a |= $b;
$c = or2($a, $b); # using default value of swap=0
$c = or2($a, $b, $swap); # overriding default
or2($a, $b, $c, $swap); # all arguments given
$c = $a->or2($b); # method call
$c = $a->or2($b, $swap);
$a->or2($b, $c, $swap);
$a->inplace->or2($b,$swap); # can be used inplace
or2($a->inplace,$b,$swap);
bitwise or of two ndarrays
Broadcasts over its inputs.
or2
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
and2
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$c = $a & $b; # overloads the Perl '&' operator
$a &= $b;
$c = and2($a, $b); # using default value of swap=0
$c = and2($a, $b, $swap); # overriding default
and2($a, $b, $c, $swap); # all arguments given
$c = $a->and2($b); # method call
$c = $a->and2($b, $swap);
$a->and2($b, $c, $swap);
$a->inplace->and2($b,$swap); # can be used inplace
and2($a->inplace,$b,$swap);
bitwise and of two ndarrays
Broadcasts over its inputs.
and2
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
xor
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$c = $a ^ $b; # overloads the Perl '^' operator
$a ^= $b;
$c = xor($a, $b); # using default value of swap=0
$c = xor($a, $b, $swap); # overriding default
xor($a, $b, $c, $swap); # all arguments given
$c = $a->xor($b); # method call
$c = $a->xor($b, $swap);
$a->xor($b, $c, $swap);
$a->inplace->xor($b,$swap); # can be used inplace
xor($a->inplace,$b,$swap);
bitwise exclusive or of two ndarrays
Broadcasts over its inputs.
xor
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
bitnot
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong)
$b = ~$a; # overloads the Perl '~' operator
$b = bitnot($a);
bitnot($a, $b); # all arguments given
$b = $a->bitnot; # method call
$a->bitnot($b);
$a->inplace->bitnot; # can be used inplace
bitnot($a->inplace);
unary bitwise negation
Broadcasts over its inputs.
bitnot
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
power
Signature: (a(); b(); [o]c(); int $swap)
Types: (cfloat cdouble cldouble float ldouble double)
$c = $a ** $b; # overloads the Perl '**' operator
$a **= $b;
$c = power($a, $b); # using default value of swap=0
$c = power($a, $b, $swap); # overriding default
power($a, $b, $c, $swap); # all arguments given
$c = $a->power($b); # method call
$c = $a->power($b, $swap);
$a->power($b, $c, $swap);
$a->inplace->power($b,$swap); # can be used inplace
power($a->inplace,$b,$swap);
raise ndarray $a
to the power $b
Broadcasts over its inputs.
power
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
atan2
Signature: (a(); b(); [o]c(); int $swap)
Types: (float ldouble double)
$c = $a atan2 $b; # overloads the Perl 'atan2' operator
$c = atan2($a, $b); # using default value of swap=0
$c = atan2($a, $b, $swap); # overriding default
atan2($a, $b, $c, $swap); # all arguments given
$c = $a->atan2($b); # method call
$c = $a->atan2($b, $swap);
$a->atan2($b, $c, $swap);
$a->inplace->atan2($b,$swap); # can be used inplace
atan2($a->inplace,$b,$swap);
elementwise atan2
of two ndarrays
Broadcasts over its inputs.
atan2
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
modulo
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a % $b; # overloads the Perl '%' operator
$a %= $b;
$c = modulo($a, $b); # using default value of swap=0
$c = modulo($a, $b, $swap); # overriding default
modulo($a, $b, $c, $swap); # all arguments given
$c = $a->modulo($b); # method call
$c = $a->modulo($b, $swap);
$a->modulo($b, $c, $swap);
$a->inplace->modulo($b,$swap); # can be used inplace
modulo($a->inplace,$b,$swap);
elementwise modulo
operation
Broadcasts over its inputs.
modulo
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
spaceship
Signature: (a(); b(); [o]c(); int $swap)
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = $a <=> $b; # overloads the Perl '<=>' operator
$c = spaceship($a, $b); # using default value of swap=0
$c = spaceship($a, $b, $swap); # overriding default
spaceship($a, $b, $c, $swap); # all arguments given
$c = $a->spaceship($b); # method call
$c = $a->spaceship($b, $swap);
$a->spaceship($b, $c, $swap);
$a->inplace->spaceship($b,$swap); # can be used inplace
spaceship($a->inplace,$b,$swap);
elementwise "<=>" operation
Broadcasts over its inputs.
spaceship
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sqrt
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = sqrt $a; # overloads the Perl 'sqrt' operator
$b = sqrt($a);
sqrt($a, $b); # all arguments given
$b = $a->sqrt; # method call
$a->sqrt($b);
$a->inplace->sqrt; # can be used inplace
sqrt($a->inplace);
elementwise square root
Broadcasts over its inputs.
sqrt
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
sin
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = sin $a; # overloads the Perl 'sin' operator
$b = sin($a);
sin($a, $b); # all arguments given
$b = $a->sin; # method call
$a->sin($b);
$a->inplace->sin; # can be used inplace
sin($a->inplace);
the sin function
Broadcasts over its inputs.
sin
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
cos
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = cos $a; # overloads the Perl 'cos' operator
$b = cos($a);
cos($a, $b); # all arguments given
$b = $a->cos; # method call
$a->cos($b);
$a->inplace->cos; # can be used inplace
cos($a->inplace);
the cos function
Broadcasts over its inputs.
cos
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
not
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$b = !$a; # overloads the Perl '!' operator
$b = not($a);
not($a, $b); # all arguments given
$b = $a->not; # method call
$a->not($b);
$a->inplace->not; # can be used inplace
not($a->inplace);
the elementwise not operation
Broadcasts over its inputs.
not
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
exp
Signature: (a(); [o]b())
Types: (cfloat cdouble cldouble float ldouble double)
$b = exp $a; # overloads the Perl 'exp' operator
$b = exp($a);
exp($a, $b); # all arguments given
$b = $a->exp; # method call
$a->exp($b);
$a->inplace->exp; # can be used inplace
exp($a->inplace);
the exponential function
Broadcasts over its inputs.
exp
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
log
Signature: (a(); [o]b())
Types: (cfloat cdouble cldouble float ldouble double)
$b = log $a; # overloads the Perl 'log' operator
$b = log($a);
log($a, $b); # all arguments given
$b = $a->log; # method call
$a->log($b);
$a->inplace->log; # can be used inplace
log($a->inplace);
the natural logarithm
Broadcasts over its inputs.
log
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
re
Signature: (complexv(); real [o]b())
Types: (cfloat cdouble cldouble)
$b = re($complexv);
re($complexv, $b); # all arguments given
$b = $complexv->re; # method call
$complexv->re($b);
Returns the real part of a complex number. Flows data back & forth.
Broadcasts over its inputs. Creates data-flow back and forth by default.
re
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
im
Signature: (complexv(); real [o]b())
Types: (cfloat cdouble cldouble)
$b = im($complexv);
im($complexv, $b); # all arguments given
$b = $complexv->im; # method call
$complexv->im($b);
Returns the imaginary part of a complex number. Flows data back & forth.
Broadcasts over its inputs. Creates data-flow back and forth by default.
im
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
_cabs
Signature: (complexv(); real [o]b())
Types: (cfloat cdouble cldouble)
$b = _cabs($complexv);
_cabs($complexv, $b); # all arguments given
$b = $complexv->_cabs; # method call
$complexv->_cabs($b);
Returns the absolute (length) of a complex number.
Broadcasts over its inputs.
_cabs
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
log10
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = log10($a);
log10($a, $b); # all arguments given
$b = $a->log10; # method call
$a->log10($b);
$a->inplace->log10; # can be used inplace
log10($a->inplace);
the base 10 logarithm
Broadcasts over its inputs.
log10
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
assgn
Signature: (a(); [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = assgn($a);
assgn($a, $b); # all arguments given
$b = $a->assgn; # method call
$a->assgn($b);
Plain numerical assignment. This is used to implement the ".=" operator
Broadcasts over its inputs.
assgn
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
carg
Signature: (!real complexv(); real [o]b())
Types: (cfloat cdouble cldouble)
$b = carg($complexv);
carg($complexv, $b); # all arguments given
$b = $complexv->carg; # method call
$complexv->carg($b);
Returns the polar angle of a complex number.
Broadcasts over its inputs.
carg
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
conj
Signature: (complexv(); [o]b())
Types: (cfloat cdouble cldouble)
$b = conj($complexv);
conj($complexv, $b); # all arguments given
$b = $complexv->conj; # method call
$complexv->conj($b);
$complexv->inplace->conj; # can be used inplace
conj($complexv->inplace);
complex conjugate.
Broadcasts over its inputs.
conj
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
czip
Signature: (!complex r(); !complex i(); complex [o]c())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble)
$c = czip($r, $i);
czip($r, $i, $c); # all arguments given
$c = $r->czip($i); # method call
$r->czip($i, $c);
convert real, imaginary to native complex, (sort of) like LISP zip function. Will add the r
ndarray to "i" times the i
ndarray. Only takes real ndarrays as input.
Broadcasts over its inputs.
czip
does not process bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
ipow
Signature: (a(); longlong b(); [o] ans())
Types: (ulonglong longlong float ldouble cfloat cdouble cldouble
double)
$ans = ipow($a, $b);
ipow($a, $b, $ans); # all arguments given
$ans = $a->ipow($b); # method call
$a->ipow($b, $ans);
$a->inplace->ipow($b); # can be used inplace
ipow($a->inplace,$b);
raise ndarray $a
to integer power $b
Algorithm from Wikipedia
Broadcasts over its inputs.
ipow
does not process bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
abs
Returns the absolute value of a number.
abs2
Signature: (a(); real [o]b())
Types: (sbyte byte short ushort long ulong indx ulonglong longlong
float double ldouble cfloat cdouble cldouble)
$b = abs2($a);
abs2($a, $b); # all arguments given
$b = $a->abs2; # method call
$a->abs2($b);
Returns the square of the absolute value of a number.
Broadcasts over its inputs.
abs2
processes bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
r2C
Signature: (r(); complex [o]c())
Types: (float ldouble cfloat cdouble cldouble double)
$c = r2C($r);
r2C($r, $c); # all arguments given
$c = $r->r2C; # method call
$r->r2C($c);
convert real to native complex, with an imaginary part of zero
Broadcasts over its inputs.
r2C
does not process bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
i2C
Signature: (i(); complex [o]c())
Types: (float ldouble cfloat cdouble cldouble double)
$c = i2C($i);
i2C($i, $c); # all arguments given
$c = $i->i2C; # method call
$i->i2C($c);
convert imaginary to native complex, with a real part of zero
Broadcasts over its inputs.
i2C
does not process bad values. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
AUTHOR
Tuomas J. Lukka (lukka@fas.harvard.edu), Karl Glazebrook (kgb@aaoepp.aao.gov.au), Doug Hunt (dhunt@ucar.edu), Christian Soeller (c.soeller@auckland.ac.nz), Doug Burke (burke@ifa.hawaii.edu), and Craig DeForest (deforest@boulder.swri.edu).