octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mapper functions for 3.1


From: David Bateman
Subject: Re: mapper functions for 3.1
Date: Mon, 11 Feb 2008 16:51:33 +0100
User-agent: Thunderbird 2.0.0.6 (X11/20070914)

Ok, to check the return types of the mapper functions under matlab
R2007b and Octave 3.0 I created the attached function, which created the
tables attached to this mail, where

D = "double"
C = "complex"
L = "logical"
S = "sparse"
CS = "complex sparse"
LS = "logical sparse"
STR = "char"

The Octave 3.0 version of cast.m needs to include the "logical" type to
get the script to run

There are a few interesting things to notice about this.

* The logical type is not promoted to a double type always. Check the
"abs" function where it is and the "acos" function where it isn't. Do we
want  to duplicate this strange behavior? I'd suggest not doing so.

* Ditto for the string types. Why should "conj" and "ceil" work for
strings, but other functions not? Maybe we should keep this behavior..

* There are some mappers which are defined for the 8, 16 and 32-bit
types but not for the 64-bit types. These being abs/sign. I see no
reason to fail for these mapper functions as we can have

static int64_t xsign (const uint64_t& x)
{
    uint64_t ret = static_cast<uint64_t>(0);
    if (x > 0)
      ret = static_cast<uint64_t>(1)
    return ret;
}

static int64_t xsign (const int64_t& x)
{
    int64_t ret = static_cast<uint64_t>(0);
    if (x > 0)
      ret = static_cast<uint64_t>(1)
    else if (x < 0)
      ret = static_cast<uint64_t>(-1)
    return ret;
}

static uint64_t xabs (const uint64_t& x)
{
   return x;
}

static int64_t xabs (const int64_t& x)
{
    int64_t ret = x;
    if (x < 0)
      ret == - ret;
    return ret;
}

So I'd prefer not to special case sign and abs for the 64 bit types.

* Why should "floor" fail for logical types when it suceeds for strings?
I'd suggest not failing at all.

* mappers with all "FAIL" are those that octave has that matlab doesn't

* The "finite" function has really weird behavior in matlab. What should
we do there?

* I'd suggest that function like isalpha should convert to a string type
and therefore be implemented as

DEFUN (isalpha, args, ,
    "-*- texinfo -*-\n\
@deftypefn {Mapping Function} {} isalpha (@var{s})\n\
@deftypefnx {Mapping Function} {} isletter (@var{s})\n\
Return true for characters that are letters (@code{isupper (@var{s})}\n\
or @code{islower (@var{s})} is true).\n\
@end deftypefn")
{
  octave_value retval;
  if (args.length () == 1)
   {
     charNDArray m = args(0).char_array_value ();
     if (!error_state)
       {
        octave_idx_type len = m.length ();
    const char *m = m.fortran_vec();
    boolNDArray result (m.dims ());
    bool *p = result.fortran_vec ();

    for (octave_idx_type i = 0; i < len; i++)
      {
        OCTAVE_QUIT;

        p[i] = bool (xisalpha (m[i]));

        if (error_state)
          break;
      }

      if (!error_state)
            retval = result;
       }
   }
  else
    print_usage ();

  return retval;
}

explictly rather than being mapper functions at all.


Given the output of matlab I have serious doubt that mathworks made a
design decision about the return types of the mapper functions and just
developed them ad-hoc? That being the case do we want to copy them? If
we don't copy them, want should be the output types? I started trying to
develop a proposed list of return types for the mapper functions. Are
they any comments, or proposals to change certain return types? One the
list of proposed return types are decided upon, getting this finished
from where I am should be relatively easy.

regards
David

-- 
David Bateman                                address@hidden
Motorola Labs - Paris                        +33 1 69 35 48 04 (Ph) 
Parc Les Algorithmes, Commune de St Aubin    +33 6 72 01 06 33 (Mob) 
91193 Gif-Sur-Yvette FRANCE                  +33 1 69 35 77 01 (Fax) 

The information contained in this communication has been classified as: 

[x] General Business Information 
[ ] Motorola Internal Use Only 
[ ] Motorola Confidential Proprietary

                    abs     acos    acosh    angle      arg     asin
        double        D        D        D        D        D        D
       complex        D        C        C        D        D        C
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        S
complex sparse        S       CS       CS        S        S       CS
logical sparse        S        S        S        S        S        S
          int8        D        D        D        D        D        D
         int16        D        D        D        D        D        D
         int32        D        D        D        D        D        D
         int64        D        D        D        D        D        D
         uint8        D        D        D        D        D        D
        uint16        D        D        D        D        D        D
        uint32        D        D        D        D        D        D
        uint64        D        D        D        D        D        D
          char        D     FAIL     FAIL     FAIL     FAIL     FAIL

                  asinh     atan    atanh     ceil     conj      cos
        double        D        D        D        D        D        D
       complex        C        C        C        C        C        C
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        S
complex sparse       CS       CS       CS       CS       CS       CS
logical sparse        S        S        S        S        S        S
          int8        D        D        D        D        D        D
         int16        D        D        D        D        D        D
         int32        D        D        D        D        D        D
         int64        D        D        D        D        D        D
         uint8        D        D        D        D        D        D
        uint16        D        D        D        D        D        D
        uint32        D        D        D        D        D        D
        uint64        D        D        D        D        D        D
          char     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL

                   cosh      erf     erfc      exp   finite      fix
        double        D        D        D        D        L        D
       complex        C     FAIL     FAIL        C        L        C
       logical        D        D        D        D        L        D
        sparse        S        S        S        S       LS        S
complex sparse       CS     FAIL     FAIL       CS       LS       CS
logical sparse        S        S        S        S       LS        S
          int8        D        D        D        D        L        D
         int16        D        D        D        D        L        D
         int32        D        D        D        D        L        D
         int64        D        D        D        D        L        D
         uint8        D        D        D        D        L        D
        uint16        D        D        D        D        L        D
        uint32        D        D        D        D        L        D
        uint64        D        D        D        D        L        D
          char     FAIL     FAIL     FAIL     FAIL        L     FAIL

                  floor    gamma     imag  isalnum  isalpha  isascii
        double        D        D        D        L        L        L
       complex        C     FAIL        D     FAIL     FAIL     FAIL
       logical        D        D        D        L        L        L
        sparse        S        S        S        L        L        L
complex sparse       CS     FAIL        S     FAIL     FAIL     FAIL
logical sparse        S        S        S        L        L        L
          int8        D        D        D        L        L        L
         int16        D        D        D        L        L        L
         int32        D        D        D        L        L        L
         int64        D        D        D        L        L        L
         uint8        D        D        D        L        L        L
        uint16        D        D        D        L        L        L
        uint32        D        D        D        L        L        L
        uint64        D        D        D        L        L        L
          char     FAIL     FAIL     FAIL        L        L        L

                iscntrl  isdigit    isinf  isgraph  islower     isna
        double        L        L        L        L        L        L
       complex     FAIL     FAIL        L     FAIL     FAIL        L
       logical        L        L        L        L        L        L
        sparse        L        L       LS        L        L       LS
complex sparse     FAIL     FAIL       LS     FAIL     FAIL       LS
logical sparse        L        L       LS        L        L       LS
          int8        L        L        L        L        L        L
         int16        L        L        L        L        L        L
         int32        L        L        L        L        L        L
         int64        L        L        L        L        L        L
         uint8        L        L        L        L        L        L
        uint16        L        L        L        L        L        L
        uint32        L        L        L        L        L        L
        uint64        L        L        L        L        L        L
          char        L        L        L        L        L        L

                  isnan  isprint  ispunct  isspace  isupper isxdigit
        double        L        L        L        L        L        L
       complex        L     FAIL     FAIL     FAIL     FAIL     FAIL
       logical        L        L        L        L        L        L
        sparse       LS        L        L        L        L        L
complex sparse       LS     FAIL     FAIL     FAIL     FAIL     FAIL
logical sparse       LS        L        L        L        L        L
          int8        L        L        L        L        L        L
         int16        L        L        L        L        L        L
         int32        L        L        L        L        L        L
         int64        L        L        L        L        L        L
         uint8        L        L        L        L        L        L
        uint16        L        L        L        L        L        L
        uint32        L        L        L        L        L        L
        uint64        L        L        L        L        L        L
          char        L        L        L        L        L        L

                 lgamma      log    log10     real    round     sign
        double        D        D        D        D        D        D
       complex     FAIL        C        C        D        C        C
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        S
complex sparse     FAIL       CS       CS        S       CS       CS
logical sparse        S        S        S        S        S        S
          int8        D        D        D        D        D        D
         int16        D        D        D        D        D        D
         int32        D        D        D        D        D        D
         int64        D        D        D        D        D        D
         uint8        D        D        D        D        D        D
        uint16        D        D        D        D        D        D
        uint32        D        D        D        D        D        D
        uint64        D        D        D        D        D        D
          char     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL

                    sin     sinh     sqrt      tan     tanh  toascii
        double        D        D        D        D        D        D
       complex        C        C        C        C        C     FAIL
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        D
complex sparse       CS       CS       CS       CS       CS     FAIL
logical sparse        S        S        S        S        S        D
          int8        D        D        D        D        D        D
         int16        D        D        D        D        D        D
         int32        D        D        D        D        D        D
         int64        D        D        D        D        D        D
         uint8        D        D        D        D        D        D
        uint16        D        D        D        D        D        D
        uint32        D        D        D        D        D        D
        uint64        D        D        D        D        D        D
          char     FAIL     FAIL     FAIL     FAIL     FAIL        D

                tolower  toupper
        double      STR      STR
       complex     FAIL     FAIL
       logical      STR      STR
        sparse      STR      STR
complex sparse     FAIL     FAIL
logical sparse      STR      STR
          int8      STR      STR
         int16      STR      STR
         int32      STR      STR
         int64      STR      STR
         uint8      STR      STR
        uint16      STR      STR
        uint32      STR      STR
        uint64      STR      STR
          char      STR      STR
                    abs     acos    acosh    angle      arg     asin
        double        D        D        D        D        D        D
       complex        D        C        C        D        D        C
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        S
complex sparse        S       CS       CS        S        S       CS
logical sparse        S        S        S        S        S        S
          int8     int8     FAIL     FAIL     FAIL     FAIL     FAIL
         int16    int16     FAIL     FAIL     FAIL     FAIL     FAIL
         int32    int32     FAIL     FAIL     FAIL     FAIL     FAIL
         int64    int64     FAIL     FAIL     FAIL     FAIL     FAIL
         uint8    uint8     FAIL     FAIL     FAIL     FAIL     FAIL
        uint16   uint16     FAIL     FAIL     FAIL     FAIL     FAIL
        uint32   uint32     FAIL     FAIL     FAIL     FAIL     FAIL
        uint64   uint64     FAIL     FAIL     FAIL     FAIL     FAIL
          char        D     FAIL     FAIL        D        D     FAIL

                  asinh     atan    atanh     ceil     conj      cos
        double        D        D        D        D        D        D
       complex        C        C        C        C        C        C
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        S
complex sparse       CS       CS       CS       CS       CS       CS
logical sparse        S        S        S        S        S        S
          int8     FAIL     FAIL     FAIL     int8     int8     FAIL
         int16     FAIL     FAIL     FAIL    int16    int16     FAIL
         int32     FAIL     FAIL     FAIL    int32    int32     FAIL
         int64     FAIL     FAIL     FAIL    int64    int64     FAIL
         uint8     FAIL     FAIL     FAIL    uint8    uint8     FAIL
        uint16     FAIL     FAIL     FAIL   uint16   uint16     FAIL
        uint32     FAIL     FAIL     FAIL   uint32   uint32     FAIL
        uint64     FAIL     FAIL     FAIL   uint64   uint64     FAIL
          char     FAIL     FAIL     FAIL        D        D     FAIL

                                                          *
                   cosh      erf     erfc      exp   finite      fix
        double        D        D        D        D        L        D
       complex        C     FAIL     FAIL        C        L        C
       logical        D     FAIL     FAIL        D        L        D
        sparse        S     FAIL     FAIL        S        L        S
complex sparse       CS     FAIL     FAIL       CS        L       CS
logical sparse        S     FAIL     FAIL        D        L        S
          int8     FAIL     FAIL     FAIL     FAIL     FAIL     int8
         int16     FAIL     FAIL     FAIL     FAIL     FAIL    int16
         int32     FAIL     FAIL     FAIL     FAIL     FAIL    int32
         int64     FAIL     FAIL     FAIL     FAIL     FAIL    int64
         uint8     FAIL     FAIL     FAIL     FAIL     FAIL    uint8
        uint16     FAIL     FAIL     FAIL     FAIL     FAIL   uint16
        uint32     FAIL     FAIL     FAIL     FAIL     FAIL   uint32
        uint64     FAIL     FAIL     FAIL     FAIL     FAIL   uint64
          char     FAIL     FAIL     FAIL     FAIL        L        D

                                                **       **       **
                                               ***      ***      ***
                  floor    gamma     imag  isalnum  isalpha  isascii
        double        D        D        D        L        L        L
       complex        C     FAIL        D        L        L        L
       logical        D     FAIL        D        L        L        L
        sparse        S     FAIL        S        L        L        L
complex sparse       CS     FAIL        S        L        L        L
logical sparse        S     FAIL        S        L        L        L
          int8     int8     FAIL     int8        L        L        L
         int16    int16     FAIL    int16        L        L        L
         int32    int32     FAIL    int32        L        L        L
         int64    int64     FAIL    int64        L        L        L
         uint8    uint8     FAIL    uint8        L        L        L
        uint16   uint16     FAIL   uint16        L        L        L
        uint32   uint32     FAIL   uint32        L        L        L
        uint64   uint64     FAIL   uint64        L        L        L
          char        D     FAIL        D        L        L        L

                     **       **                **       **
                    ***      ***               ***      ***      ***
                iscntrl  isdigit    isinf  isgraph  islower     isna
        double        L        L        L        L        L        L
       complex        L        L        L        L        L        L
       logical        L        L        L        L        L        L
        sparse        L        L       LS        L        L       LS
complex sparse        L        L       LS        L        L       LS
logical sparse        L        L       LS        L        L       LS
          int8        L        L        L        L        L        L
         int16        L        L        L        L        L        L
         int32        L        L        L        L        L        L
         int64        L        L        L        L        L        L
         uint8        L        L        L        L        L        L
        uint16        L        L        L        L        L        L
        uint32        L        L        L        L        L        L
        uint64        L        L        L        L        L        L
          char        L        L        L        L        L        L

                              **       **                **       **
                             ***      ***               ***      ***
                  isnan  isprint  ispunct  isspace  isupper isxdigit
        double        L        L        L        L        L        L
       complex        L        L        L        L        L        L
       logical        L        L        L        L        L        L
        sparse       LS        L        L       LS       LS        L
complex sparse       LS        L        L       LS       LS        L
logical sparse       LS        L        L       LS       LS        L
          int8        L        L        L        L        L        L
         int16        L        L        L        L        L        L
         int32        L        L        L        L        L        L
         int64        L        L        L        L        L        L
         uint8        L        L        L        L        L        L
        uint16        L        L        L        L        L        L
        uint32        L        L        L        L        L        L
        uint64        L        L        L        L        L        L
          char        L        L        L        L        L        L

                    ***
                 lgamma      log    log10     real    round     sign
        double        D        D        D        D        D        D
       complex     FAIL        C        C        D        C        C
       logical     FAIL        D        D        D        D        D
        sparse     FAIL        S        S        S        S        S
complex sparse     FAIL       CS       CS        S       CS       CS
logical sparse     FAIL        S        S        S        S        S
          int8     FAIL     FAIL     FAIL     int8     int8     int8
         int16     FAIL     FAIL     FAIL    int16    int16    int16
         int32     FAIL     FAIL     FAIL    int32    int32    int32
         int64     FAIL     FAIL     FAIL    int64    int64    int64
         uint8     FAIL     FAIL     FAIL    uint8    uint8    uint8
        uint16     FAIL     FAIL     FAIL   uint16   uint16   uint16
        uint32     FAIL     FAIL     FAIL   uint32   uint32   uint32
        uint64     FAIL     FAIL     FAIL   uint64   uint64   uint64
          char     FAIL     FAIL     FAIL        D        D        D

                                                                  **
                    sin     sinh     sqrt      tan     tanh  toascii
        double        D        D        D        D        D        D
       complex        C        C        C        C        C        D
       logical        D        D        D        D        D        D
        sparse        S        S        S        S        S        D
complex sparse       CS       CS       CS       CS       CS        D
logical sparse        S        S        S        S        S        D
          int8     FAIL     FAIL     FAIL     FAIL     FAIL        D
         int16     FAIL     FAIL     FAIL     FAIL     FAIL        D
         int32     FAIL     FAIL     FAIL     FAIL     FAIL        D
         int64     FAIL     FAIL     FAIL     FAIL     FAIL        D
         uint8     FAIL     FAIL     FAIL     FAIL     FAIL        D
        uint16     FAIL     FAIL     FAIL     FAIL     FAIL        D
        uint32     FAIL     FAIL     FAIL     FAIL     FAIL        D
        uint64     FAIL     FAIL     FAIL     FAIL     FAIL        D
          char     FAIL     FAIL     FAIL     FAIL     FAIL        D

                     **       **
                tolower  toupper
        double      STR      STR
       complex      STR      STR
       logical      STR      STR
        sparse      STR      STR
complex sparse      STR      STR
logical sparse      STR      STR
          int8      STR      STR
         int16      STR      STR
         int32      STR      STR
         int64      STR      STR
         uint8      STR      STR
        uint16      STR      STR
        uint32      STR      STR
        uint64      STR      STR
          char      STR      STR


*) The finite function appears to only be valid for non sparse
 type in R2007b, this is weird

**) implicit conversion to string for these function

***) Function doesn't exist in matlabR2007b and so we have to
   define our own behavior
                    abs     acos    acosh    angle      arg     asin
        double        D        D        D        D     FAIL        D
       complex        D        C        C        D     FAIL        C
       logical        D     FAIL     FAIL        D     FAIL     FAIL
        sparse        S        S        S        S     FAIL        S
complex sparse        S       CS       CS        S     FAIL       CS
logical sparse     FAIL     FAIL     FAIL        S     FAIL     FAIL
          int8     int8     FAIL     FAIL     FAIL     FAIL     FAIL
         int16    int16     FAIL     FAIL     FAIL     FAIL     FAIL
         int32    int32     FAIL     FAIL     FAIL     FAIL     FAIL
         int64     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
         uint8    uint8     FAIL     FAIL     FAIL     FAIL     FAIL
        uint16   uint16     FAIL     FAIL     FAIL     FAIL     FAIL
        uint32   uint32     FAIL     FAIL     FAIL     FAIL     FAIL
        uint64     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
          char        D     FAIL     FAIL        D     FAIL     FAIL

                  asinh     atan    atanh     ceil     conj      cos
        double        D        D        D        D        D        D
       complex        C        C        C        C        C        C
       logical     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
        sparse        S        S        S        S        S        S
complex sparse       CS       CS       CS       CS       CS       CS
logical sparse     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
          int8     FAIL     FAIL     FAIL     int8     int8     FAIL
         int16     FAIL     FAIL     FAIL    int16    int16     FAIL
         int32     FAIL     FAIL     FAIL    int32    int32     FAIL
         int64     FAIL     FAIL     FAIL    int64    int64     FAIL
         uint8     FAIL     FAIL     FAIL    uint8    uint8     FAIL
        uint16     FAIL     FAIL     FAIL   uint16   uint16     FAIL
        uint32     FAIL     FAIL     FAIL   uint32   uint32     FAIL
        uint64     FAIL     FAIL     FAIL   uint64   uint64     FAIL
          char     FAIL     FAIL     FAIL        D        D     FAIL

                   cosh      erf     erfc      exp   finite      fix
        double        D        D        D        D        L        D
       complex        C     FAIL     FAIL        C        L        C
       logical     FAIL     FAIL     FAIL     FAIL        L        D
        sparse        S     FAIL     FAIL        S        L        S
complex sparse       CS     FAIL     FAIL       CS        L       CS
logical sparse     FAIL     FAIL     FAIL     FAIL        L     FAIL
          int8     FAIL     FAIL     FAIL     FAIL     FAIL     int8
         int16     FAIL     FAIL     FAIL     FAIL     FAIL    int16
         int32     FAIL     FAIL     FAIL     FAIL     FAIL    int32
         int64     FAIL     FAIL     FAIL     FAIL     FAIL    int64
         uint8     FAIL     FAIL     FAIL     FAIL     FAIL    uint8
        uint16     FAIL     FAIL     FAIL     FAIL     FAIL   uint16
        uint32     FAIL     FAIL     FAIL     FAIL     FAIL   uint32
        uint64     FAIL     FAIL     FAIL     FAIL     FAIL   uint64
          char     FAIL     FAIL     FAIL     FAIL        L        D

                  floor    gamma     imag  isalnum  isalpha  isascii
        double        D        D        D     FAIL     FAIL     FAIL
       complex        C     FAIL        D     FAIL     FAIL     FAIL
       logical     FAIL     FAIL        D     FAIL     FAIL     FAIL
        sparse        S     FAIL        S     FAIL     FAIL     FAIL
complex sparse       CS     FAIL        S     FAIL     FAIL     FAIL
logical sparse     FAIL     FAIL        S     FAIL     FAIL     FAIL
          int8     int8     FAIL     int8     FAIL     FAIL     FAIL
         int16    int16     FAIL    int16     FAIL     FAIL     FAIL
         int32    int32     FAIL    int32     FAIL     FAIL     FAIL
         int64    int64     FAIL    int64     FAIL     FAIL     FAIL
         uint8    uint8     FAIL    uint8     FAIL     FAIL     FAIL
        uint16   uint16     FAIL   uint16     FAIL     FAIL     FAIL
        uint32   uint32     FAIL   uint32     FAIL     FAIL     FAIL
        uint64   uint64     FAIL   uint64     FAIL     FAIL     FAIL
          char        D     FAIL        D     FAIL     FAIL     FAIL

                iscntrl  isdigit    isinf  isgraph  islower     isna
        double     FAIL     FAIL        L     FAIL     FAIL     FAIL
       complex     FAIL     FAIL        L     FAIL     FAIL     FAIL
       logical     FAIL     FAIL        L     FAIL     FAIL     FAIL
        sparse     FAIL     FAIL       LS     FAIL     FAIL     FAIL
complex sparse     FAIL     FAIL       LS     FAIL     FAIL     FAIL
logical sparse     FAIL     FAIL       LS     FAIL     FAIL     FAIL
          int8     FAIL     FAIL        L     FAIL     FAIL     FAIL
         int16     FAIL     FAIL        L     FAIL     FAIL     FAIL
         int32     FAIL     FAIL        L     FAIL     FAIL     FAIL
         int64     FAIL     FAIL        L     FAIL     FAIL     FAIL
         uint8     FAIL     FAIL        L     FAIL     FAIL     FAIL
        uint16     FAIL     FAIL        L     FAIL     FAIL     FAIL
        uint32     FAIL     FAIL        L     FAIL     FAIL     FAIL
        uint64     FAIL     FAIL        L     FAIL     FAIL     FAIL
          char     FAIL     FAIL        L     FAIL     FAIL     FAIL

                  isnan  isprint  ispunct  isspace  isupper isxdigit
        double        L     FAIL     FAIL        L     FAIL     FAIL
       complex        L     FAIL     FAIL        L     FAIL     FAIL
       logical        L     FAIL     FAIL        L     FAIL     FAIL
        sparse       LS     FAIL     FAIL        L     FAIL     FAIL
complex sparse       LS     FAIL     FAIL        L     FAIL     FAIL
logical sparse       LS     FAIL     FAIL        L     FAIL     FAIL
          int8        L     FAIL     FAIL        L     FAIL     FAIL
         int16        L     FAIL     FAIL        L     FAIL     FAIL
         int32        L     FAIL     FAIL        L     FAIL     FAIL
         int64        L     FAIL     FAIL        L     FAIL     FAIL
         uint8        L     FAIL     FAIL        L     FAIL     FAIL
        uint16        L     FAIL     FAIL        L     FAIL     FAIL
        uint32        L     FAIL     FAIL        L     FAIL     FAIL
        uint64        L     FAIL     FAIL        L     FAIL     FAIL
          char        L     FAIL     FAIL        L     FAIL     FAIL

                 lgamma      log    log10     real    round     sign
        double     FAIL        D        D        D        D        D
       complex     FAIL        C        C        D        C        C
       logical     FAIL     FAIL     FAIL        D     FAIL     FAIL
        sparse     FAIL        S        S        S        S        S
complex sparse     FAIL       CS       CS        S       CS       CS
logical sparse     FAIL     FAIL     FAIL        S     FAIL     FAIL
          int8     FAIL     FAIL     FAIL     int8     int8     int8
         int16     FAIL     FAIL     FAIL    int16    int16    int16
         int32     FAIL     FAIL     FAIL    int32    int32    int32
         int64     FAIL     FAIL     FAIL    int64    int64     FAIL
         uint8     FAIL     FAIL     FAIL    uint8    uint8    uint8
        uint16     FAIL     FAIL     FAIL   uint16   uint16   uint16
        uint32     FAIL     FAIL     FAIL   uint32   uint32   uint32
        uint64     FAIL     FAIL     FAIL   uint64   uint64     FAIL
          char     FAIL     FAIL     FAIL        D        D        D

                    sin     sinh     sqrt      tan     tanh  toascii
        double        D        D        D        D        D     FAIL
       complex        C        C        C        C        C     FAIL
       logical     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
        sparse        S        S        S        S        S     FAIL
complex sparse       CS       CS       CS       CS       CS     FAIL
logical sparse     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
          int8     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
         int16     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
         int32     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
         int64     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
         uint8     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
        uint16     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
        uint32     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
        uint64     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL
          char     FAIL     FAIL     FAIL     FAIL     FAIL     FAIL

                tolower  toupper
        double     FAIL     FAIL
       complex     FAIL     FAIL
       logical     FAIL     FAIL
        sparse     FAIL     FAIL
complex sparse     FAIL     FAIL
logical sparse     FAIL     FAIL
          int8     FAIL     FAIL
         int16     FAIL     FAIL
         int32     FAIL     FAIL
         int64     FAIL     FAIL
         uint8     FAIL     FAIL
        uint16     FAIL     FAIL
        uint32     FAIL     FAIL
        uint64     FAIL     FAIL
          char     FAIL     FAIL
function [rret, rtyp, rmapper] = testmapper (n)
  s = warning ('off');
  typ = {'double', 'complex', 'logical', 'sparse', 'complex sparse', ...
         'logical sparse', 'int8', 'int16', 'int32', 'int64', 'uint8', ...
         'uint16', 'uint32', 'uint64', 'char'};
  mappers = {'abs', 'acos', 'acosh', 'angle', 'arg', 'asin', 'asinh', ...
             'atan', 'atanh', 'ceil', 'conj', 'cos', 'cosh', 'erf', ...
             'erfc', 'exp', 'finite', 'fix', 'floor', 'gamma', 'imag', ...
             'isalnum', 'isalpha', 'isascii', 'iscntrl', 'isdigit', ...
             'isinf', 'isgraph', 'islower', 'isna', 'isnan', 'isprint', ...
             'ispunct', 'isspace', 'isupper', 'isxdigit', 'lgamma', ...
             'log', 'log10', 'real', 'round', 'sign', 'sin', 'sinh', ...
             'sqrt', 'tan', 'tanh', 'toascii', 'tolower', 'toupper'};
  cmplx = [2, 5];
  nlogical = [3, 6];
  ninteger = [7, 8, 9, 10, 11, 12, 13, 14];
  nsparse = [4, 5, 6];

  ret = cell (length (typ), length (mappers));

  for i = 1 : length(typ)
    if (strcmp (typ{i}, 'char'))
      m = 'Test String';
    else
      if (any (cmplx == i))
        m = (1 + 1i) * ones (n, n);
      else
        m = ones (n, n);
      end
      if (any (nlogical == i))
        m = cast (m, 'logical');
      end
      if (any (ninteger == i))
        m = cast (m, typ{i});
      end
      if (any (nsparse == i))
        m = sparse (m);
      end
    end

    for j = 1 : length (mappers)
      try
        out = feval (mappers{j}, m);
        outtyp = class (out);
        if (strcmp (outtyp, 'double'))
          if (iscomplex (out))
            if (issparse (out))
              outtyp = 'complex sparse';
            else
              outtyp = 'complex';
            end
          elseif (issparse (out))
            outtyp = 'sparse';
          end
        elseif (strcmp (outtyp, 'logical') && issparse (out))
          outtyp = 'logical sparse';
        end
        ret{i,j} = outtyp;
      catch
        ret{i,j} = 'FAIL';
      end
    end
  end
  warning (s);
  if (nargout == 0)
    for k = 1 : 6 : length(mappers)
      kmax = min (k + 5 , length (mappers));
      fprintf('              ');
      for j = k : kmax
        fprintf ('%9s', mappers{j})
      end
      fprintf('\n');
      for i = 1 : length (typ)
        fprintf ('%14s', typ{i})
        for j = k : kmax
          fprintf (' %8s', shortname (ret{i,j}));        
        end
        fprintf('\n');
      end
      fprintf('\n');
    end
  else
    rret = ret;
    rmappers = mappers;
    rtyp = typ;
  end
end
    
function y = iscomplex (x)
  y = x(:);
  y = any(imag(y) ~= 0);
end

function y = shortname (x)
  if (strcmp (x, 'double'))
    y = 'D';
  elseif (strcmp (x, 'complex'))
    y = 'C';
  elseif (strcmp (x, 'logical'))
    y = 'L';
  elseif (strcmp (x, 'sparse'))
    y = 'S';
  elseif (strcmp (x, 'complex sparse'))
    y = 'CS';
  elseif (strcmp (x, 'logical sparse'))
    y = 'LS';
  elseif (strcmp (x, 'char'))
    y = 'STR';
  else
    y = x;
  end
end

reply via email to

[Prev in Thread] Current Thread [Next in Thread]