Diff of the two buildlogs: -- --- b1/build.log 2020-06-18 11:02:08.321573903 +0000 +++ b2/build.log 2020-06-18 11:33:12.685143475 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Wed Jul 21 05:16:39 -12 2021 -I: pbuilder-time-stamp: 1626887799 +I: Current time: Fri Jun 19 01:02:10 +14 2020 +I: pbuilder-time-stamp: 1592478130 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/buster-reproducible-base.tgz] I: copying local configuration @@ -18,7 +18,7 @@ I: Extracting source gpgv: unknown type of key resource 'trustedkeys.kbx' gpgv: keyblock resource '/root/.gnupg/trustedkeys.kbx': General error -gpgv: Signature made Thu Jan 3 23:12:21 2019 -12 +gpgv: Signature made Sat Jan 5 01:12:21 2019 +14 gpgv: using RSA key 3F464391498FE874BDB5D98F2124AA1983785C90 gpgv: Can't check signature: No public key dpkg-source: warning: failed to verify signature on ./octave-symbolic_2.7.1-2.dsc @@ -31,138 +31,172 @@ dpkg-source: info: applying linspace-drop-test.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/64655/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/D01_modify_environment starting +debug: Running on profitbricks-build2-i386. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +Removing 'diversion of /bin/sh to /bin/sh.distrib by dash' +Adding 'diversion of /bin/sh to /bin/sh.distrib by bash' +Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash' +Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash' +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='i386' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=18' - DISTRIBUTION='' - HOME='/root' - HOST_ARCH='i386' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="0" [2]="3" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") + BASH_VERSION='5.0.3(1)-release' + BUILDDIR=/build + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=i386 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=10' + DIRSTACK=() + DISTRIBUTION= + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=i686 + HOST_ARCH=i386 IFS=' ' - INVOCATION_ID='a752a1e21d754d2f8b600f128a668122' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - LD_LIBRARY_PATH='/usr/lib/libeatmydata' - LD_PRELOAD='libeatmydata.so' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='64655' - PS1='# ' - PS2='> ' + INVOCATION_ID=72b5ab47a2984c1d94602ce200e2e20c + LANG=C + LANGUAGE=de_CH:de + LC_ALL=C + LD_LIBRARY_PATH=/usr/lib/libeatmydata + LD_PRELOAD=libeatmydata.so + MACHTYPE=i686-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=14301 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.a88wjcXISr/pbuilderrc_sHc1 --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.a88wjcXISr/b1 --logfile b1/build.log octave-symbolic_2.7.1-2.dsc' - SUDO_GID='112' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://85.184.249.68:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.a88wjcXISr/pbuilderrc_1TRv --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.a88wjcXISr/b2 --logfile b2/build.log octave-symbolic_2.7.1-2.dsc' + SUDO_GID=112 + SUDO_UID=107 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://78.137.99.97:3128 I: uname -a - Linux profitbricks-build16-i386 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux + Linux i-capture-the-hostname 4.19.0-9-686-pae #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) i686 GNU/Linux I: ls -l /bin - total 5476 - -rwxr-xr-x 1 root root 1302248 Apr 17 2019 bash - -rwxr-xr-x 3 root root 38280 Jul 10 2019 bunzip2 - -rwxr-xr-x 3 root root 38280 Jul 10 2019 bzcat - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzcmp -> bzdiff - -rwxr-xr-x 1 root root 2227 Jul 10 2019 bzdiff - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzegrep -> bzgrep - -rwxr-xr-x 1 root root 4877 Jun 24 2019 bzexe - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzfgrep -> bzgrep - -rwxr-xr-x 1 root root 3641 Jul 10 2019 bzgrep - -rwxr-xr-x 3 root root 38280 Jul 10 2019 bzip2 - -rwxr-xr-x 1 root root 17768 Jul 10 2019 bzip2recover - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzless -> bzmore - -rwxr-xr-x 1 root root 1297 Jul 10 2019 bzmore - -rwxr-xr-x 1 root root 38692 Feb 28 2019 cat - -rwxr-xr-x 1 root root 75588 Feb 28 2019 chgrp - -rwxr-xr-x 1 root root 63268 Feb 28 2019 chmod - -rwxr-xr-x 1 root root 75588 Feb 28 2019 chown - -rwxr-xr-x 1 root root 153732 Feb 28 2019 cp - -rwxr-xr-x 1 root root 132820 Jan 17 2019 dash - -rwxr-xr-x 1 root root 120676 Feb 28 2019 date - -rwxr-xr-x 1 root root 92040 Feb 28 2019 dd - -rwxr-xr-x 1 root root 100620 Feb 28 2019 df - -rwxr-xr-x 1 root root 149736 Feb 28 2019 dir - -rwxr-xr-x 1 root root 79412 Jan 9 2019 dmesg - lrwxrwxrwx 1 root root 8 Sep 26 2018 dnsdomainname -> hostname - lrwxrwxrwx 1 root root 8 Sep 26 2018 domainname -> hostname - -rwxr-xr-x 1 root root 34532 Feb 28 2019 echo - -rwxr-xr-x 1 root root 28 Jan 7 2019 egrep - -rwxr-xr-x 1 root root 34532 Feb 28 2019 false - -rwxr-xr-x 1 root root 28 Jan 7 2019 fgrep - -rwxr-xr-x 1 root root 67700 Jan 9 2019 findmnt - -rwsr-xr-x 1 root root 30112 Apr 22 2020 fusermount - -rwxr-xr-x 1 root root 206392 Jan 7 2019 grep - -rwxr-xr-x 2 root root 2345 Jan 5 2019 gunzip - -rwxr-xr-x 1 root root 6375 Jan 5 2019 gzexe - -rwxr-xr-x 1 root root 100952 Jan 5 2019 gzip - -rwxr-xr-x 1 root root 21916 Sep 26 2018 hostname - -rwxr-xr-x 1 root root 79752 Feb 28 2019 ln - -rwxr-xr-x 1 root root 55400 Jul 26 2018 login - -rwxr-xr-x 1 root root 149736 Feb 28 2019 ls - -rwxr-xr-x 1 root root 112032 Jan 9 2019 lsblk - -rwxr-xr-x 1 root root 87972 Feb 28 2019 mkdir - -rwxr-xr-x 1 root root 79748 Feb 28 2019 mknod - -rwxr-xr-x 1 root root 46916 Feb 28 2019 mktemp - -rwxr-xr-x 1 root root 42348 Jan 9 2019 more - -rwsr-xr-x 1 root root 50592 Jan 9 2019 mount - -rwxr-xr-x 1 root root 13724 Jan 9 2019 mountpoint - -rwxr-xr-x 1 root root 157832 Feb 28 2019 mv - lrwxrwxrwx 1 root root 8 Sep 26 2018 nisdomainname -> hostname - lrwxrwxrwx 1 root root 14 Feb 14 2019 pidof -> /sbin/killall5 - -rwxr-xr-x 1 root root 38660 Feb 28 2019 pwd - lrwxrwxrwx 1 root root 4 Apr 17 2019 rbash -> bash - -rwxr-xr-x 1 root root 46852 Feb 28 2019 readlink - -rwxr-xr-x 1 root root 75588 Feb 28 2019 rm - -rwxr-xr-x 1 root root 42756 Feb 28 2019 rmdir - -rwxr-xr-x 1 root root 22276 Jan 21 2019 run-parts - -rwxr-xr-x 1 root root 125036 Dec 22 2018 sed - lrwxrwxrwx 1 root root 4 Jul 21 02:46 sh -> dash - -rwxr-xr-x 1 root root 34532 Feb 28 2019 sleep - -rwxr-xr-x 1 root root 79652 Feb 28 2019 stty - -rwsr-xr-x 1 root root 71072 Jan 9 2019 su - -rwxr-xr-x 1 root root 34564 Feb 28 2019 sync - -rwxr-xr-x 1 root root 504024 Apr 23 2019 tar - -rwxr-xr-x 1 root root 13860 Jan 21 2019 tempfile - -rwxr-xr-x 1 root root 104292 Feb 28 2019 touch - -rwxr-xr-x 1 root root 34532 Feb 28 2019 true - -rwxr-xr-x 1 root root 17768 Apr 22 2020 ulockmgr_server - -rwsr-xr-x 1 root root 30108 Jan 9 2019 umount - -rwxr-xr-x 1 root root 34532 Feb 28 2019 uname - -rwxr-xr-x 2 root root 2345 Jan 5 2019 uncompress - -rwxr-xr-x 1 root root 149736 Feb 28 2019 vdir - -rwxr-xr-x 1 root root 34208 Jan 9 2019 wdctl - -rwxr-xr-x 1 root root 946 Jan 21 2019 which - lrwxrwxrwx 1 root root 8 Sep 26 2018 ypdomainname -> hostname - -rwxr-xr-x 1 root root 1983 Jan 5 2019 zcat - -rwxr-xr-x 1 root root 1677 Jan 5 2019 zcmp - -rwxr-xr-x 1 root root 5879 Jan 5 2019 zdiff - -rwxr-xr-x 1 root root 29 Jan 5 2019 zegrep - -rwxr-xr-x 1 root root 29 Jan 5 2019 zfgrep - -rwxr-xr-x 1 root root 2080 Jan 5 2019 zforce - -rwxr-xr-x 1 root root 7584 Jan 5 2019 zgrep - -rwxr-xr-x 1 root root 2205 Jan 5 2019 zless - -rwxr-xr-x 1 root root 1841 Jan 5 2019 zmore - -rwxr-xr-x 1 root root 4552 Jan 5 2019 znew -I: user script /srv/workspace/pbuilder/64655/tmp/hooks/D02_print_environment finished + total 5488 + -rwxr-xr-x 1 root root 1302248 Apr 18 2019 bash + -rwxr-xr-x 3 root root 38280 Jul 11 2019 bunzip2 + -rwxr-xr-x 3 root root 38280 Jul 11 2019 bzcat + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzcmp -> bzdiff + -rwxr-xr-x 1 root root 2227 Jul 11 2019 bzdiff + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzegrep -> bzgrep + -rwxr-xr-x 1 root root 4877 Jun 25 2019 bzexe + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzfgrep -> bzgrep + -rwxr-xr-x 1 root root 3641 Jul 11 2019 bzgrep + -rwxr-xr-x 3 root root 38280 Jul 11 2019 bzip2 + -rwxr-xr-x 1 root root 17768 Jul 11 2019 bzip2recover + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzless -> bzmore + -rwxr-xr-x 1 root root 1297 Jul 11 2019 bzmore + -rwxr-xr-x 1 root root 38692 Mar 1 2019 cat + -rwxr-xr-x 1 root root 75588 Mar 1 2019 chgrp + -rwxr-xr-x 1 root root 63268 Mar 1 2019 chmod + -rwxr-xr-x 1 root root 75588 Mar 1 2019 chown + -rwxr-xr-x 1 root root 153732 Mar 1 2019 cp + -rwxr-xr-x 1 root root 132820 Jan 18 2019 dash + -rwxr-xr-x 1 root root 120676 Mar 1 2019 date + -rwxr-xr-x 1 root root 92040 Mar 1 2019 dd + -rwxr-xr-x 1 root root 100620 Mar 1 2019 df + -rwxr-xr-x 1 root root 149736 Mar 1 2019 dir + -rwxr-xr-x 1 root root 79412 Jan 10 2019 dmesg + lrwxrwxrwx 1 root root 8 Sep 27 2018 dnsdomainname -> hostname + lrwxrwxrwx 1 root root 8 Sep 27 2018 domainname -> hostname + -rwxr-xr-x 1 root root 34532 Mar 1 2019 echo + -rwxr-xr-x 1 root root 28 Jan 8 2019 egrep + -rwxr-xr-x 1 root root 34532 Mar 1 2019 false + -rwxr-xr-x 1 root root 28 Jan 8 2019 fgrep + -rwxr-xr-x 1 root root 67700 Jan 10 2019 findmnt + -rwsr-xr-x 1 root root 30112 Apr 23 09:38 fusermount + -rwxr-xr-x 1 root root 206392 Jan 8 2019 grep + -rwxr-xr-x 2 root root 2345 Jan 6 2019 gunzip + -rwxr-xr-x 1 root root 6375 Jan 6 2019 gzexe + -rwxr-xr-x 1 root root 100952 Jan 6 2019 gzip + -rwxr-xr-x 1 root root 21916 Sep 27 2018 hostname + -rwxr-xr-x 1 root root 79752 Mar 1 2019 ln + -rwxr-xr-x 1 root root 55400 Jul 27 2018 login + -rwxr-xr-x 1 root root 149736 Mar 1 2019 ls + -rwxr-xr-x 1 root root 112032 Jan 10 2019 lsblk + -rwxr-xr-x 1 root root 87972 Mar 1 2019 mkdir + -rwxr-xr-x 1 root root 79748 Mar 1 2019 mknod + -rwxr-xr-x 1 root root 46916 Mar 1 2019 mktemp + -rwxr-xr-x 1 root root 42348 Jan 10 2019 more + -rwsr-xr-x 1 root root 50592 Jan 10 2019 mount + -rwxr-xr-x 1 root root 13724 Jan 10 2019 mountpoint + -rwxr-xr-x 1 root root 157832 Mar 1 2019 mv + lrwxrwxrwx 1 root root 8 Sep 27 2018 nisdomainname -> hostname + lrwxrwxrwx 1 root root 14 Feb 15 2019 pidof -> /sbin/killall5 + -rwxr-xr-x 1 root root 38660 Mar 1 2019 pwd + lrwxrwxrwx 1 root root 4 Apr 18 2019 rbash -> bash + -rwxr-xr-x 1 root root 46852 Mar 1 2019 readlink + -rwxr-xr-x 1 root root 75588 Mar 1 2019 rm + -rwxr-xr-x 1 root root 42756 Mar 1 2019 rmdir + -rwxr-xr-x 1 root root 22276 Jan 22 2019 run-parts + -rwxr-xr-x 1 root root 125036 Dec 23 2018 sed + lrwxrwxrwx 1 root root 4 Jun 19 01:04 sh -> bash + lrwxrwxrwx 1 root root 4 Jun 17 22:30 sh.distrib -> dash + -rwxr-xr-x 1 root root 34532 Mar 1 2019 sleep + -rwxr-xr-x 1 root root 79652 Mar 1 2019 stty + -rwsr-xr-x 1 root root 71072 Jan 10 2019 su + -rwxr-xr-x 1 root root 34564 Mar 1 2019 sync + -rwxr-xr-x 1 root root 504024 Apr 24 2019 tar + -rwxr-xr-x 1 root root 13860 Jan 22 2019 tempfile + -rwxr-xr-x 1 root root 104292 Mar 1 2019 touch + -rwxr-xr-x 1 root root 34532 Mar 1 2019 true + -rwxr-xr-x 1 root root 17768 Apr 23 09:38 ulockmgr_server + -rwsr-xr-x 1 root root 30108 Jan 10 2019 umount + -rwxr-xr-x 1 root root 34532 Mar 1 2019 uname + -rwxr-xr-x 2 root root 2345 Jan 6 2019 uncompress + -rwxr-xr-x 1 root root 149736 Mar 1 2019 vdir + -rwxr-xr-x 1 root root 34208 Jan 10 2019 wdctl + -rwxr-xr-x 1 root root 946 Jan 22 2019 which + lrwxrwxrwx 1 root root 8 Sep 27 2018 ypdomainname -> hostname + -rwxr-xr-x 1 root root 1983 Jan 6 2019 zcat + -rwxr-xr-x 1 root root 1677 Jan 6 2019 zcmp + -rwxr-xr-x 1 root root 5879 Jan 6 2019 zdiff + -rwxr-xr-x 1 root root 29 Jan 6 2019 zegrep + -rwxr-xr-x 1 root root 29 Jan 6 2019 zfgrep + -rwxr-xr-x 1 root root 2080 Jan 6 2019 zforce + -rwxr-xr-x 1 root root 7584 Jan 6 2019 zgrep + -rwxr-xr-x 1 root root 2205 Jan 6 2019 zless + -rwxr-xr-x 1 root root 1841 Jan 6 2019 zmore + -rwxr-xr-x 1 root root 4552 Jan 6 2019 znew +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -563,7 +597,7 @@ Get: 359 http://deb.debian.org/debian buster/main i386 dh-octave all 0.6.2 [19.9 kB] Get: 360 http://deb.debian.org/debian buster/main i386 python3-mpmath all 1.1.0-1 [416 kB] Get: 361 http://deb.debian.org/debian buster/main i386 python3-sympy all 1.3-2 [3500 kB] -Fetched 143 MB in 3s (47.8 MB/s) +Fetched 143 MB in 41s (3473 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libbsd0:i386. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19234 files and directories currently installed.) @@ -2056,7 +2090,7 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/octave-symbolic-2.7.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b +I: Running cd /build/octave-symbolic-2.7.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b dpkg-buildpackage: info: source package octave-symbolic dpkg-buildpackage: info: source version 2.7.1-2 dpkg-buildpackage: info: source distribution unstable @@ -2095,500 +2129,324 @@ dh_octave_check -O--buildsystem=octave Checking package... Checking m files ... -[inst/heaviside.m] ->>>>> /build/octave-symbolic-2.7.1/inst/heaviside.m -***** assert (heaviside (0) == 0.5) -***** assert (isnan (heaviside (nan))) -***** assert (isequal (heaviside ([-inf -eps 0 eps inf]), [0 0 0.5 1 1])) -***** assert (isequaln (heaviside ([-1 1 nan]), [0 1 nan])) -***** assert (heaviside (0, 1) == 1) -***** error heaviside (1i) -***** assert (isa (heaviside (single (0)), 'single')) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/python_cmd.m] ->>>>> /build/octave-symbolic-2.7.1/inst/python_cmd.m +[inst/@double/dilog.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/dilog.m ***** test - % general test - x = 10; y = 6; - cmd = '(x,y) = _ins; return (x+y,x-y)'; - [a,b] = python_cmd (cmd, x, y); - assert (a == x + y && b == x - y) + x = 1.1; + y = sym(11)/10; + A = dilog (x); + B = double (dilog (y)); + assert (A, B, -4*eps); Symbolic pkg v2.7.1: Python communication link active, SymPy v1.3. ***** test - % bool - assert (python_cmd ('return True,')) - assert (~python_cmd ('return False,')) -***** test - % float - assert (abs(python_cmd ('return 1.0/3,') - 1/3) < 1e-15) -***** test - % int - r = python_cmd ('return 123456'); - assert (r == 123456) - assert (isinteger (r)) -***** test - % long (on python2) - r = python_cmd ('return 42 if sys.version_info >= (3,0) else long(42)'); - assert (r == 42) - assert (isinteger (r)) -***** test - % string - x = 'octave'; - cmd = 's = _ins[0]; return s.capitalize(),'; - y = python_cmd (cmd, x); - assert (strcmp(y, 'Octave')) -***** test - % string with escaped newlines, comes back as escaped newlines - x = 'a string\nbroke off\nmy guitar\n'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) -***** test - % string with actual newlines, comes back as actual newlines - x = sprintf('a string\nbroke off\nmy guitar\n'); - y = python_cmd ('return _ins', x); - y2 = strrep(y, sprintf('\n'), sprintf('\r\n')); % windows - assert (strcmp(x, y) || strcmp(x, y2)) -***** test - % cmd string with newlines, works with cell - y = python_cmd ('return "string\nbroke",'); - y2 = sprintf('string\nbroke'); - y3 = strrep(y2, sprintf('\n'), sprintf('\r\n')); % windows - assert (strcmp(y, y2) || strcmp(y, y3)) -***** test - % string with XML escapes - x = '<> >< <<>>'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) - x = '&'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) -***** test - % strings with double quotes - x = 'a\"b\"c'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) - x = '\"'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) -***** test - % cmd has double quotes, these must be escaped by user - % (of course: she is writing python code) - expy = 'a"b"c'; - y = python_cmd ('return "a\"b\"c",'); - assert (strcmp(y, expy)) -***** test - % strings with quotes - x = 'a''b'; % this is a single quote - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) -***** test - % strings with quotes - x = '\"a''b\"c''\"d'; - y = python_cmd ('return _ins[0]', x); - assert (strcmp(y, x)) -***** test - % strings with quotes - expy = '"a''b"c''"d'; - y = python_cmd ('s = "\"a''b\"c''\"d"; return s'); - assert (strcmp(y, expy)) -***** test - % strings with printf escapes - x = '% %% %%% %%%% %s %g %%s'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) + y = [2 2 sym(pi); exp(sym(1)) 5 6]; + x = double (y); + A = dilog (x); + B = double (dilog (y)); + assert (A, B, -eps); ***** test - % cmd with printf escapes - x = '% %% %%% %%%% %s %g %%s'; - y = python_cmd (['return "' x '",']); - assert (strcmp(y, x)) + % maple: + % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; + % > for a in A do evalf(dilog(a)) end do; + x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; + A = [ -0.59248494924959145800 - 1.5760154034463234224*1i + -1.0549087538833908441 - 3.8759788000863368495*1i + -12.192421669033171348 + -2.9195729380904939394 - 3.9540920181102973073*1i + 1.6459519160623984119 - 0.00032335296277550987686*1i + -1.5445800511775466879 + 9.4256034277816069684*1i ]; + B = dilog (x); + assert (A, B, -eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@double/coshint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/coshint.m ***** test - % cmd w/ backslash and \n must be escaped by user - expy = 'a\b\\c\nd\'; - y = python_cmd ('return "a\\b\\\\c\\nd\\",'); - assert (strcmp(y, expy)) + x = 1.1; + y = sym(11)/10; + A = coshint (x); + B = double (coshint (y)); + assert (A, B, -4*eps); ***** test - % slashes - x = '/\\ // \\\\ \\/\\/\\'; - z = '/\ // \\ \/\/\'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) + y = [2 3 sym(pi); exp(sym(1)) 5 6]; + x = double (y); + A = coshint (x); + B = double (coshint (y)); + assert (A, B, -4*eps); ***** test - % slashes - z = '/\ // \\ \/\/\'; - y = python_cmd ('return "/\\ // \\\\ \\/\\/\\"'); - assert (strcmp(y, z)) + % maple: + % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; + % > for a in A do evalf(Chi(a)) end do; + x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; + A = [ 0.58447599687824767874 + 1.8682915044330306402*1i + -0.63131069034703116988 + 1.8986171211850702957*1i + 0.13577763724269399110e42 + -0.045456433004455372635 + 1.5707963267948966192*1i + -8.6330747070747332203 + 3.1315929868531280002*1i + 0.74701205140887966531e7 + 0.10381444259644068585e8*1i ]; + B = coshint (x); + assert (A, B, -eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@double/bernoulli.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/bernoulli.m +***** error bernoulli (1, 2, 3) +***** error bernoulli ([1 2], [1 2 3]) +***** error bernoulli ([1 2], [1; 2]) +***** assert (bernoulli (0), 1) +***** assert (bernoulli (3), 0) +***** assert (bernoulli (1), -0.5, -eps) ***** test - % strings with special chars - x = '!@#$^&* you!'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) - x = '~-_=+[{]}|;:,.?'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) + n = sym(88); + m = 88; + A = bernoulli (m); + B = double (bernoulli (n)); + assert (A, B, -eps); ***** xtest - % string with backtick trouble for system -c (sysoneline) - x = '`'; - y = python_cmd ('return _ins', x); - assert (strcmp(y, x)) -***** test - % unicode - s1 = '我爱你'; - cmd = 'return u"\u6211\u7231\u4f60",'; - s2 = python_cmd (cmd); - assert (strcmp (s1, s2)) -***** test - % unicode with \x - s1 = '我'; - cmd = 'return b"\xe6\x88\x91".decode("utf-8")'; - s2 = python_cmd (cmd); - assert (strcmp (s1, s2)) + m = [0 1; 2 4]; + n = sym(m); + A = bernoulli (m); + B = double (bernoulli (n)); + assert (isequal (A, B)); ***** test - % unicode with \x and some escaped backslashes - s1 = '\我\'; - cmd = 'return b"\\\xe6\x88\x91\\".decode("utf-8")'; - s2 = python_cmd (cmd); - assert (strcmp (s1, s2)) -***** xtest - % unicode passthru - s = '我爱你'; - s2 = python_cmd ('return _ins', s); - assert (strcmp (s, s2)) - s = '我爱你<>\&//\#%% %\我'; - s2 = python_cmd ('return _ins', s); - assert (strcmp (s, s2)) + y = sym(19)/10; + n = sym(2); + x = 1.9; + m = 2; + A = bernoulli (m, x); + B = double (bernoulli (n, y)); + assert (A, B, -eps); ***** xtest - % unicode w/ slashes, escapes - s = '我<>\&//\#%% %\我'; - s2 = python_cmd ('return "我<>\\&//\\#%% %\\我"'); - assert (strcmp (s, s2)) -***** test - % list, tuple - assert (isequal (python_cmd ('return [1,2,3],'), {1, 2, 3})) - assert (isequal (python_cmd ('return (4,5),'), {4, 5})) - assert (isequal (python_cmd ('return (6,),'), {6,})) - assert (isequal (python_cmd ('return [],'), {})) -***** test - % dict - cmd = 'd = dict(); d["a"] = 6; d["b"] = 10; return d,'; - d = python_cmd (cmd); - assert (d.a == 6 && d.b == 10) -***** test - r = python_cmd ('return 6'); - assert (isequal (r, 6)) -***** test - r = python_cmd ('return "Hi"'); - assert (strcmp (r, 'Hi')) -***** test - % blank lines, lines with spaces - a = python_cmd({ '', '', ' ', 'return 6', ' ', ''}); - assert (isequal (a, 6)) -***** test - % blank lines, strange comment lines - cmd = {'a = 1', '', '#', '', '# ', ' #', 'a = a + 2', ' #', 'return a'}; - a = python_cmd(cmd); - assert (isequal (a, 3)) -***** test - % return empty string (was https://bugs.python.org/issue25270) - assert (isempty (python_cmd ('return ""'))) -***** test - % return nothing (via an empty list) - % note distinct from 'return [],' - python_cmd('return []') -***** test - % return nothing (because no return command) - python_cmd('dummy = 1') -***** test - % return nothing (because no command) - python_cmd('') -***** test - % return nothing (because no command) - python_cmd({}) -***** error - % python exception while passing variables to python - % This tests the "INTERNAL_PYTHON_ERROR" path. - % FIXME: this is a very specialized test, relies on internal octsympy - % implementation details, and may need to be adjusted for changes. - b = sym([], 'S.make_an_attribute_err_exception', [1 1], 'Test', 'Test', 'Test'); - c = b + 1; -Traceback (most recent call last): - File "", line 4, in - File "/usr/lib/python3/dist-packages/sympy/core/singleton.py", line 116, in __getattr__ - name, self)) -AttributeError: Attribute 'make_an_attribute_err_exception' was not installed on SymPy registry S -***** test - % ...and after the above test, the pipe should still work - a = python_cmd('return _ins[0]*2', 3); - assert (isequal (a, 6)) -***** error - % This command does not fail with native interface and '@pyobject' - if (strcmp (sympref ('ipc'), 'native')) - error ('does not know how to export type') - else - python_cmd({'return type(int)'}); - end -Traceback (most recent call last): - File "", line 2, in - File "", line 12, in octoutput_drv - File "", line 99, in octoutput -ValueError: octoutput does not know how to export type -***** test - % ...and after the above test, the pipe should still work - a = python_cmd('return _ins[0]*2', 3); - assert (isequal (a, 6)) -***** test - % complex input - [A, B] = python_cmd ('z = 2*_ins[0]; return (z.real,z.imag)', 3+4i); - assert (A, 6) - assert (B, 8) -***** test - % complex output - z = python_cmd ('return 3+2j'); - assert (z, 3+2i) -***** error - s = char ('abc', 'defgh', '12345'); - r = python_cmd ('return _ins[0]', s); -***** test - r = python_cmd ('return len(_ins[0])', ''); - assert (r == 0) -46 tests, 46 passed, 0 known failure, 0 skipped -[inst/lambertw.m] ->>>>> /build/octave-symbolic-2.7.1/inst/lambertw.m -***** assert (isequal (lambertw (0), 0)) -***** assert (isequal (lambertw (0, 0), 0)) -***** assert (lambertw (-1/exp(1)), -1, 2*eps) -***** assert (lambertw (0, -1/exp(1)), -1, 2*eps) -***** assert (lambertw (-1, -1/exp(1)), -1, 2*eps) -***** test - x = [1 2 3 pi 10 100 1000 12345]; - W = lambertw (x); - assert (W.*exp (W), x, -3*eps) -***** test - x = [1 2 3 pi 10 100 1000 12345]; - k = [-3 -2 -1 0 1 2 3 4]; - W = lambertw (k, x); - assert (W.*exp (W), x, -10*eps) -***** test - % input shape preserved - x = [0 1; 2 3]; - b = x; - W = lambertw (b, x); - assert (W.*exp (W), x, -10*eps) -***** test - % input shape preserved - x = [0 1; 2 3]; - b = 0; - W = lambertw (b, x); - assert (W.*exp (W), x, -10*eps) -***** test - % input shape preserved - x = 10; - b = [0 1; 2 3]; - W = lambertw (b, x); - assert (W.*exp (W), x*ones (size (b)), -10*eps) -***** assert (isnan (lambertw (nan))) + % these give nan, need upstream fix in sympy + assert (isequal (bernoulli (4, inf), inf)) + assert (isequal (bernoulli (4, -inf), inf)) + assert (isequal (bernoulli (3, inf), inf)) + assert (isequal (bernoulli (3, -inf), -inf)) +!!!!! known failure +assert (isequal (bernoulli (4, inf), inf)) failed ***** test - % limiting behaviour as z large - k = 3; - A = lambertw (k, 1e100); - assert (abs (imag (A) - 2*pi*k) < 0.1) + assert (isnan (bernoulli(3, nan))) + assert (isnumeric (bernoulli(3, nan))) ***** test - % limiting behaviour as z large, up imag axis - k = 1; - A = lambertw (k, 1e100*1i); - assert (abs (imag (A) - (2*k+0.5)*pi) < 0.1) + % maple, complex input + A = 34.21957245745810513 - 130.0046256649829101i; + B = bernoulli(7, 2.123 + 1.234i); + assert (A, B, -5*eps); ***** test - % limiting behaviour as z large, down imag axis - k = -2; - A = lambertw (k, -1e100*1i); - assert (abs (imag (A) - (2*k-0.5)*pi) < 0.1) + % x matrix, m scalar + y = [1 2 sym(pi); exp(sym(1)) 5 6]; + n = sym(2); + x = double (y); + m = 2; + A = bernoulli (m, x); + B = double (bernoulli (n, y)); + assert (A, B, -eps); ***** test - % limiting behaviour as z large, near branch - k = 3; - A = lambertw (k, -1e100); - B = lambertw (k, -1e100 + 1i); - C = lambertw (k, -1e100 - 1i); - assert (abs (imag (A) - (2*k+1)*pi) < 0.1) - assert (abs (imag (B) - (2*k+1)*pi) < 0.1) - assert (abs (imag (C) - (2*k-1)*pi) < 0.1) + % m matrix, x scalar + m = [1 2 3; 4 5 6]; + n = sym(m); + y = sym(21)/10; + x = 2.1; + A = bernoulli (m, x); + B = double (bernoulli (n, y)); + assert (A, B, -3*eps); +14 tests, 13 passed, 1 known failure, 0 skipped +[inst/@double/pochhammer.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/pochhammer.m +***** error pochhammer ([1 2], [1 2 3]) +***** error pochhammer ([1 2], [1; 2]) +***** error pochhammer (1, 2, 3) +***** error pochhammer (1) ***** test - % infinities and nan - A = lambertw ([inf exp(1) -inf nan]); - B = [inf 1 inf + pi*1i nan]; - assert (isequaln (A, B)) + y = sym(11)/10; + t = sym(3); + x = 1.1; + s = 3; + A = pochhammer (x, s); + B = double (pochhammer (y, t)); + assert (A, B, -2*eps); ***** test - % infinities and nan - A = lambertw (3, [inf 1 -inf nan]); - B = [inf + 2*3*pi*1i lambertw(3,1) inf + (2*3+1)*pi*1i nan]; - assert (isequaln (A, B)) + % maple + A = 256.798558090310131720; + B = pochhammer (18.1, 1.9); + assert (A, B, -20*eps) ***** test - % infinities and nan - A = lambertw ([0 1 2 0], [inf -inf nan exp(1)]); - B = [inf inf+3*pi*1i nan 1]; - assert (isequaln (A, B)) + % maple, complex inputs> + A = 2.67921619474318221972 + 1.96716724764630702653*1i; + B = pochhammer (12.1+3.1*i, 0.5+0.2i); + assert (A, B, -4*eps); ***** test - % scalar infinity z, vector b - A = lambertw ([1 2 -3], inf); - B = [lambertw(1, inf) lambertw(2, inf) lambertw(-3, inf)]; - assert (isequal (A, B)) + % maple, matrix inputs + A = [5.61467232547723663908 20.6144884613920190965]; + B = pochhammer ([0.9 0.8], [3.1 4.2]); + assert (A, B, -3*eps); +***** xtest + % broken upstream, https://github.com/sympy/sympy/issues/14822 + % x matrix, s scalar + y = [1 2 sym(pi); exp(sym(1)) 5 6]; + t = sym(2); + x = double (y); + s = 2; + A = pochhammer (s, x); + B = double (pochhammer (t, y)); + assert (A, B, -eps); +!!!!! known failure +ASSERT errors for: assert (A,B,-eps) + + Location | Observed | Expected | Reason + (2,1) 15.8429 15.8429 Rel err 2.2425e-16 exceeds tol 2.2204e-16 by 2e-18 + (1,3) 29.7701 29.7701 Rel err 2.3868e-16 exceeds tol 2.2204e-16 by 2e-17 ***** test - % scalar -infinity z, vector b - A = lambertw ([1 2 -3], -inf); - B = [lambertw(1, -inf) lambertw(2, -inf) lambertw(-3, -inf)]; - assert (isequal (A, B)) + % s matrix, x scalar + t = [1 2 sym(pi); exp(sym(1)) 5 6]; + y = sym(2); + s = double (t); + x = 2; + A = pochhammer (s, x); + B = double (pochhammer (t, y)); + assert (A, B, -5*eps); +10 tests, 9 passed, 1 known failure, 0 skipped +[inst/@double/chebyshevU.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/chebyshevU.m +***** error chebyshevU ([1 2], [1 2 3]) +***** error chebyshevU ([1 2], [1; 2]) +***** error chebyshevU (1, 2, 3) +***** error chebyshevU (1) ***** test - % scalar z nan, vector b - A = lambertw ([1 2 -3], nan); - B = [nan nan nan]; - assert (isequaln (A, B)) -21 tests, 21 passed, 0 known failure, 0 skipped -[inst/cell2sym.m] ->>>>> /build/octave-symbolic-2.7.1/inst/cell2sym.m + y = sym(11)/10; + t = sym(2); + x = 1.1; + s = 2; + A = chebyshevU (s, x); + B = double (chebyshevU (t, y)); + assert (A, B, -2*eps); ***** test - A = {1 2 3; 4 5 6}; - B = [1 2 3; 4 5 6]; - assert (isequal (cell2sym(A), sym(B))) + % maple + A = 1.661891066691338157; + B = chebyshevU (18.1, 0.9); + assert (A, B, -3*eps) ***** test - A = {'a' 'b'; 'c' 10}; - B = [sym('a') sym('b'); sym('c') sym(10)]; - assert (isequal (cell2sym(A), B)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/assume.m] ->>>>> /build/octave-symbolic-2.7.1/inst/assume.m -***** error - a = assume('a', 'real') -***** error - assume positive integer -***** error - assume x y -***** error - assume x clear real -***** error - assume a>0 -***** error - assume 'x/pi' integer + % maple, complex inputs> + % ChebyshevU(12.1+3.1*I, 0.5+0.2*I); + A = 1.046959313670290818 - 0.03386773634958834846*1i; + B = chebyshevU (12.1+3.1*i, 0.5+0.2i); + assert (A, B, -3*eps); ***** test - syms x - assume x positive - a = assumptions(x); - assert(strcmp(a, 'x: positive')) - assume x even - a = assumptions(x); - assert(strcmp(a, 'x: even')) + % maple, matrix inputs + A = [2.2543638828875776000 -1.3872651600553574400]; + B = chebyshevU ([16 17], [0.9 0.8]); + assert (A, B, -10*eps); ***** test - % multiple assumptions - syms x - assume x positive integer - [tilde, a] = assumptions(x, 'dict'); - assert(a{1}.integer) - assert(a{1}.positive) + % x matrix, s scalar + y = [1 2 sym(pi); exp(sym(1)) 5 6]; + t = sym(2); + x = double (y); + s = 2; + A = chebyshevU (s, x); + B = double (chebyshevU (t, y)); + assert (A, B, -eps); ***** test - % does workspace - syms x positive - x2 = x; - f = sin(x); - assume x negative - a = assumptions(x); - assert(strcmp(a, 'x: negative')) - a = assumptions(x2); - assert(strcmp(a, 'x: negative')) - a = assumptions(f); - assert(strcmp(a, 'x: negative')) -***** error - % does not create new variable x - clear x - assume x real -***** error - % no explicit variable named x - clear x - f = 2*sym('x'); - assume x real + % s matrix, x scalar + t = [1 2 sym(pi); exp(sym(1)) 5 6]; + y = sym(2); + s = double (t); + x = 2; + A = chebyshevU (s, x); + B = double (chebyshevU (t, y)); + assert (A, B, -eps); +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/@double/fresnels.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/fresnels.m ***** test - % clear does workspace - syms x positive - f = 2*x; - assume x clear - assert (isempty (assumptions (f))); - assert (isempty (assumptions ())); + x = 1.1; + y = sym(11)/10; + A = fresnels (x); + B = double (fresnels (y)); + assert (A, B, -4*eps); ***** test - syms x y - f = sin (2*x); - assume x y real - assert (strcmp (assumptions (x), 'x: real')) - assert (strcmp (assumptions (y), 'y: real')) - assert (strcmp (assumptions (f), 'x: real')) + y = [2 3 sym(pi); exp(sym(1)) 5 6]; + x = double (y); + A = fresnels (x); + B = double (fresnels (y)); + assert (A, B, -4*eps); ***** test - syms x y - f = sin (2*x); - assume x y positive even - assert (strcmp (assumptions (x), 'x: positive, even') || strcmp (assumptions (x), 'x: even, positive')) - assert (strcmp (assumptions (y), 'y: positive, even') || strcmp (assumptions (y), 'y: even, positive')) - assert (strcmp (assumptions (f), 'x: positive, even') || strcmp (assumptions (f), 'x: even, positive')) + % maple: + % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; + % > for a in A do evalf(FresnelS(a)) end do; + x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; + A = [ 36.725464883991438430 + 15.587751104404587334*1i + 0.12213736710980573217e13 - 0.47688568479924574726e12*1i + 0.49681690114783755327 + -0.46816997858488224040*1i + -0.52344169596561937423e-12 + 0.15707439669173367248e-13*1i + 0.75738824160998910399e24 + 0.15391592966931193100e26*1i ]; + B = fresnels (x); + assert (A, B, -eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@double/logint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/logint.m ***** test - % works from variable names not symbols - syms x y - a = [x y]; - assume a real - assert (strcmp (assumptions (x), 'x: real')) - assert (strcmp (assumptions (y), 'y: real')) + x = 1.1; + y = sym(11)/10; + A = logint (x); + B = double (logint (y)); + assert (A, B, -4*eps); ***** test - % works from variable names not symbols - y = sym('x'); - f = 2*y; - assume y real - assert (strcmp (assumptions (f), 'x: real')) + y = [2 3 sym(pi); exp(sym(1)) 5 6]; + x = double (y); + A = logint (x); + B = double (logint (y)); + assert (A, B, -4*eps); ***** test - % matrix of symbols - syms a b c d - A = [a b; c d]; - assume A real - assert (strcmp (assumptions (a), 'a: real')) - assert (strcmp (assumptions (b), 'b: real')) - assert (strcmp (assumptions (c), 'c: real')) - assert (strcmp (assumptions (d), 'd: real')) + % maple: + % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; + % > for a in A do evalf(Li(a)) end do; + x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; + A = [ 1.3876787420229375511 + 2.5087546988592328752*1i + 1.6987684473874802274 + 4.5936366057115204667*1i + 30.126141584079629926 + 3.4936715673748995398 + 5.5260023797127391973*1i + 0.90264689772681592152e-5 + 3.1415953634267361942*1i + -2.3996350854560916779 - 7.6971739096353664559*1i ]; + B = logint (x); + assert (A, B, -eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@double/sinint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/sinint.m ***** test - % assume after symfun - clear x - syms f(x) - assume x real - assert (~ isempty (assumptions (formula (f)))) - assert (~ isempty (assumptions (argnames (f)))) -18 tests, 18 passed, 0 known failure, 0 skipped -[inst/poly2sym.m] ->>>>> /build/octave-symbolic-2.7.1/inst/poly2sym.m -***** shared x,y,a,b,c,p - syms x y a b c - p = x^3 + 2*x^2 + 3*x + 4; -***** assert(isAlways( poly2sym([1 2 3 4]) == p )) -***** assert(isAlways( poly2sym([1 2 3 4],x) == p )) -***** assert(isAlways( poly2sym([1 2 3 4],y) == subs(p,x,y) )) -***** assert(isAlways( poly2sym([1 2 3 4],5) == subs(p,x,5) )) -***** assert(isequal( poly2sym ([1]), 1 )) -***** assert(isequal( poly2sym ([]), 0 )) -***** assert(isAlways( poly2sym(sym([1 2 3 4]),x) == p )) -***** assert(isAlways( poly2sym([a b c],x) == a*x^2 + b*x + c )) -***** assert(isAlways( poly2sym([a b c]) == a*x^2 + b*x + c )) -***** assert(isequal( poly2sym(sym([])), 0 )) -***** assert(isAlways( poly2sym({sym(1) sym(2)}, x) == x + 2 )) -***** assert(isequal( poly2sym ({1}), 1 )) -***** assert(isequal( poly2sym ({}), 0 )) -***** assert(isequal( poly2sym ({1}, x), 1 )) -***** assert(isequal( poly2sym ({}, x), 0 )) -***** assert(isAlways( poly2sym([x x], x) == x^2 + x )) + x = 1.1; + y = sym(11)/10; + A = sinint (x); + B = double (sinint (y)); + assert (A, B, -4*eps); ***** test - % mixed cell array with doubles and syms - assert (isequal (poly2sym ({2.0 sym(3) int64(4)}), 2*x^2 + 3*x + 4)) + y = [2 3 sym(pi); exp(sym(1)) 5 6]; + x = double (y); + A = sinint (x); + B = double (sinint (y)); + assert (A, B, -4*eps); +***** assert (sinint (0), 0) +***** assert (sinint (inf), pi/2) +***** assert (sinint (-inf), -pi/2) +***** assert (sinint (1), 0.9460830703671830149414, -2*eps) +***** assert (sinint (-1), -0.9460830703671830149414, -2*eps) +***** assert (sinint (pi), 1.851937051982466170361, -2*eps) +***** assert (sinint (-pi), -1.851937051982466170361, -2*eps) +***** assert (sinint (300), 1.5708810882137495193, -2*eps) +***** assert (sinint (1e4), 1.5708915453859619157, -2*eps) +***** assert (sinint (20i), 1.2807826332028294459e7*1i, -2*eps) ***** test - % string for x - p = poly2sym ([1 2], 's'); - syms s - assert (isequal (p, s + 2)) -18 tests, 18 passed, 0 known failure, 0 skipped -[inst/catalan.m] ->>>>> /build/octave-symbolic-2.7.1/inst/catalan.m -***** error catalan (sym(1)) -***** assert (double (catalan ()) > 0.915965594177) -***** assert (double (catalan ()) < 0.915965594178) -3 tests, 3 passed, 0 known failure, 0 skipped + % maple: + % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; + % > for a in A do evalf(Si(a)) end do; + x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; + A = [ 1.6782404878293681180 + 2.0396845546022061045*1i + -18.154174221650281533 + 1.6146414539230479060*1i + 1.5622254668890562934 + 1246.1144901994233444*1i + -0.000099999999944461111128 + 0.99999999833338888972e-6*1i + -1.5386156269726011209 - 0.053969388020443786229*1i ]; + B = sinint (x); + assert (A, B, -eps) +13 tests, 13 passed, 0 known failure, 0 skipped [inst/@double/cosint.m] >>>>> /build/octave-symbolic-2.7.1/inst/@double/cosint.m ***** test @@ -2640,72 +2498,34 @@ assert (C1, C2, -100*eps); assert (S1, S2, -100*eps); 15 tests, 15 passed, 0 known failure, 0 skipped -[inst/@double/fresnels.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/fresnels.m +[inst/@double/sinhint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/sinhint.m ***** test x = 1.1; y = sym(11)/10; - A = fresnels (x); - B = double (fresnels (y)); + A = sinhint (x); + B = double (sinhint (y)); assert (A, B, -4*eps); ***** test y = [2 3 sym(pi); exp(sym(1)) 5 6]; x = double (y); - A = fresnels (x); - B = double (fresnels (y)); + A = sinhint (x); + B = double (sinhint (y)); assert (A, B, -4*eps); ***** test % maple: % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(FresnelS(a)) end do; + % > for a in A do evalf(Shi(a)) end do; x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 36.725464883991438430 + 15.587751104404587334*1i - 0.12213736710980573217e13 - 0.47688568479924574726e12*1i - 0.49681690114783755327 - -0.46816997858488224040*1i - -0.52344169596561937423e-12 + 0.15707439669173367248e-13*1i - 0.75738824160998910399e24 + 0.15391592966931193100e26*1i ]; - B = fresnels (x); + A = [ 0.45769171128668800567 + 1.8332099215048436239*1i + 0.60888490416819746440 + 1.2482232175376056201*1i + 0.13577763724269399110e42 + 1.6583475942188740493*1i + -0.00010000000005553888891 + 0.10000000016666111119e-5*1i + -0.74701205140887967022e7 - 0.10381447401236722090e8*1i ]; + B = sinhint (x); assert (A, B, -eps) 3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@double/sinint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/sinint.m -***** test - x = 1.1; - y = sym(11)/10; - A = sinint (x); - B = double (sinint (y)); - assert (A, B, -4*eps); -***** test - y = [2 3 sym(pi); exp(sym(1)) 5 6]; - x = double (y); - A = sinint (x); - B = double (sinint (y)); - assert (A, B, -4*eps); -***** assert (sinint (0), 0) -***** assert (sinint (inf), pi/2) -***** assert (sinint (-inf), -pi/2) -***** assert (sinint (1), 0.9460830703671830149414, -2*eps) -***** assert (sinint (-1), -0.9460830703671830149414, -2*eps) -***** assert (sinint (pi), 1.851937051982466170361, -2*eps) -***** assert (sinint (-pi), -1.851937051982466170361, -2*eps) -***** assert (sinint (300), 1.5708810882137495193, -2*eps) -***** assert (sinint (1e4), 1.5708915453859619157, -2*eps) -***** assert (sinint (20i), 1.2807826332028294459e7*1i, -2*eps) -***** test - % maple: - % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(Si(a)) end do; - x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 1.6782404878293681180 + 2.0396845546022061045*1i - -18.154174221650281533 + 1.6146414539230479060*1i - 1.5622254668890562934 - 1246.1144901994233444*1i - -0.000099999999944461111128 + 0.99999999833338888972e-6*1i - -1.5386156269726011209 - 0.053969388020443786229*1i ]; - B = sinint (x); - assert (A, B, -eps) -13 tests, 13 passed, 0 known failure, 0 skipped [inst/@double/euler.m] >>>>> /build/octave-symbolic-2.7.1/inst/@double/euler.m ***** error euler (1, 2, 3) @@ -2782,44 +2602,44 @@ assert (A, B, -3*eps); end 14 tests, 14 passed, 0 known failure, 0 skipped -[inst/@double/chebyshevU.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/chebyshevU.m -***** error chebyshevU ([1 2], [1 2 3]) -***** error chebyshevU ([1 2], [1; 2]) -***** error chebyshevU (1, 2, 3) -***** error chebyshevU (1) +[inst/@double/polylog.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/polylog.m +***** error polylog ([1 2], [1 2 3]) +***** error polylog ([1 2], [1; 2]) +***** error polylog (1, 2, 3) +***** error polylog (1) ***** test y = sym(11)/10; t = sym(2); x = 1.1; s = 2; - A = chebyshevU (s, x); - B = double (chebyshevU (t, y)); - assert (A, B, -2*eps); + A = polylog (s, x); + B = double (polylog (t, y)); + assert (A, B, -eps); ***** test % maple - A = 1.661891066691338157; - B = chebyshevU (18.1, 0.9); - assert (A, B, -3*eps) + A = 2.3201804233130983964 - 3.4513922952232026614*1i; + B = polylog (2, 3); + assert (A, B, -eps) ***** test - % maple, complex inputs> - % ChebyshevU(12.1+3.1*I, 0.5+0.2*I); - A = 1.046959313670290818 - 0.03386773634958834846*1i; - B = chebyshevU (12.1+3.1*i, 0.5+0.2i); - assert (A, B, -3*eps); + % maple, complex inputs + A = -11.381456201167411758 + 6.2696695219721651947*1i; + B = polylog (1+2i, 3+4i); + assert (A, B, -eps); ***** test % maple, matrix inputs - A = [2.2543638828875776000 -1.3872651600553574400]; - B = chebyshevU ([16 17], [0.9 0.8]); - assert (A, B, -10*eps); + A1 = 0.47961557317612748431 - 0.52788287823025778869*1i; + A2 = -0.0049750526563452645369 - 0.024579343612396884851*1i; + B = polylog ([-1-2i -3], [30+40i 40i]); + assert ([A1 A2], B, -eps); ***** test % x matrix, s scalar y = [1 2 sym(pi); exp(sym(1)) 5 6]; t = sym(2); x = double (y); s = 2; - A = chebyshevU (s, x); - B = double (chebyshevU (t, y)); + A = polylog (s, x); + B = double (polylog (t, y)); assert (A, B, -eps); ***** test % s matrix, x scalar @@ -2827,157 +2647,36 @@ y = sym(2); s = double (t); x = 2; - A = chebyshevU (s, x); - B = double (chebyshevU (t, y)); + A = polylog (s, x); + B = double (polylog (t, y)); assert (A, B, -eps); 10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@double/zeta.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/zeta.m -***** error zeta (1, 2, 3) -***** assert (isnan (zeta (nan))) -***** test - x = 1.1; - y = sym(11)/10; - A = zeta (x); - B = double (zeta (y)); - assert (A, B, -4*eps); -***** test - y = [2 3 sym(pi); exp(sym(1)) 5 6]; - x = double (y); - A = zeta (x); - B = double (zeta (y)); - assert (A, B, -4*eps); -***** test - % maple: - % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(Zeta(a)) end do; - x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 0.59816556976238173670 - 0.35185474521784529050*1i - 0.21425967567391921717 + 0.52503846985036050707*1i - 1.0 - 1.7564685929749629608 - 0.10151198543617116894*1i - -0.49990811617645824900 - 0.91873792757763831501e-6*1i - 175.09070083717643866 - 71.512541417467273425*1i ]; - B = zeta (x); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@double/logint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/logint.m -***** test - x = 1.1; - y = sym(11)/10; - A = logint (x); - B = double (logint (y)); - assert (A, B, -4*eps); -***** test - y = [2 3 sym(pi); exp(sym(1)) 5 6]; - x = double (y); - A = logint (x); - B = double (logint (y)); - assert (A, B, -4*eps); -***** test - % maple: - % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(Li(a)) end do; - x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 1.3876787420229375511 + 2.5087546988592328752*1i - 1.6987684473874802274 + 4.5936366057115204667*1i - 30.126141584079629926 - 3.4936715673748995398 + 5.5260023797127391973*1i - 0.90264689772681592152e-5 + 3.1415953634267361942*1i - -2.3996350854560916779 - 7.6971739096353664559*1i ]; - B = logint (x); - assert (A, B, -eps) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@double/bernoulli.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/bernoulli.m -***** error bernoulli (1, 2, 3) -***** error bernoulli ([1 2], [1 2 3]) -***** error bernoulli ([1 2], [1; 2]) -***** assert (bernoulli (0), 1) -***** assert (bernoulli (3), 0) -***** assert (bernoulli (1), -0.5, -eps) -***** test - n = sym(88); - m = 88; - A = bernoulli (m); - B = double (bernoulli (n)); - assert (A, B, -eps); -***** xtest - m = [0 1; 2 4]; - n = sym(m); - A = bernoulli (m); - B = double (bernoulli (n)); - assert (isequal (A, B)); -***** test - y = sym(19)/10; - n = sym(2); - x = 1.9; - m = 2; - A = bernoulli (m, x); - B = double (bernoulli (n, y)); - assert (A, B, -eps); -***** xtest - % these give nan, need upstream fix in sympy - assert (isequal (bernoulli (4, inf), inf)) - assert (isequal (bernoulli (4, -inf), inf)) - assert (isequal (bernoulli (3, inf), inf)) - assert (isequal (bernoulli (3, -inf), -inf)) -!!!!! known failure -assert (isequal (bernoulli (4, inf), inf)) failed -***** test - assert (isnan (bernoulli(3, nan))) - assert (isnumeric (bernoulli(3, nan))) -***** test - % maple, complex input - A = 34.21957245745810513 - 130.0046256649829101i; - B = bernoulli(7, 2.123 + 1.234i); - assert (A, B, -5*eps); -***** test - % x matrix, m scalar - y = [1 2 sym(pi); exp(sym(1)) 5 6]; - n = sym(2); - x = double (y); - m = 2; - A = bernoulli (m, x); - B = double (bernoulli (n, y)); - assert (A, B, -eps); -***** test - % m matrix, x scalar - m = [1 2 3; 4 5 6]; - n = sym(m); - y = sym(21)/10; - x = 2.1; - A = bernoulli (m, x); - B = double (bernoulli (n, y)); - assert (A, B, -3*eps); -14 tests, 13 passed, 1 known failure, 0 skipped -[inst/@double/coshint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/coshint.m +[inst/@double/fresnelc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/fresnelc.m ***** test x = 1.1; y = sym(11)/10; - A = coshint (x); - B = double (coshint (y)); + A = fresnelc (x); + B = double (fresnelc (y)); assert (A, B, -4*eps); ***** test y = [2 3 sym(pi); exp(sym(1)) 5 6]; x = double (y); - A = coshint (x); - B = double (coshint (y)); + A = fresnelc (x); + B = double (fresnelc (y)); assert (A, B, -4*eps); ***** test % maple: % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(Chi(a)) end do; + % > for a in A do evalf(FresnelC(a)) end do; x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 0.58447599687824767874 + 1.8682915044330306402*1i - -0.63131069034703116988 + 1.8986171211850702957*1i - 0.13577763724269399110e42 - -0.045456433004455372635 + 1.5707963267948966192*1i - -8.6330747070747332203 + 3.1315929868531280002*1i - 0.74701205140887966531e7 + 0.10381444259644068585e8*1i ]; - B = coshint (x); + A = [ 16.087871374125480424 - 36.225687992881650217*1i + 0.47688568479874574722e12 + 0.12213736710985573216e13*1i + 0.49999989867881789756 + 0.49989869420551572361*1i + -0.000099999999999999997535 + 0.99999999999999987665e-6*1i + 0.15391592966931193100e26 - 0.75738824160998910388e24*1i ]; + B = fresnelc (x); assert (A, B, -eps) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/@double/chebyshevT.m] @@ -3029,62 +2728,36 @@ B = double (chebyshevT (t, y)); assert (A, B, -eps); 10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@double/sinhint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/sinhint.m +[inst/@double/zeta.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@double/zeta.m +***** error zeta (1, 2, 3) +***** assert (isnan (zeta (nan))) ***** test x = 1.1; y = sym(11)/10; - A = sinhint (x); - B = double (sinhint (y)); + A = zeta (x); + B = double (zeta (y)); assert (A, B, -4*eps); ***** test y = [2 3 sym(pi); exp(sym(1)) 5 6]; x = double (y); - A = sinhint (x); - B = double (sinhint (y)); - assert (A, B, -4*eps); -***** test - % maple: - % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(Shi(a)) end do; - x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 0.45769171128668800567 + 1.8332099215048436239*1i - 0.60888490416819746440 + 1.2482232175376056201*1i - 0.13577763724269399110e42 - 1.6583475942188740493*1i - -0.00010000000005553888891 + 0.10000000016666111119e-5*1i - -0.74701205140887967022e7 - 0.10381447401236722090e8*1i ]; - B = sinhint (x); - assert (A, B, -eps) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@double/dilog.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/dilog.m -***** test - x = 1.1; - y = sym(11)/10; - A = dilog (x); - B = double (dilog (y)); + A = zeta (x); + B = double (zeta (y)); assert (A, B, -4*eps); ***** test - y = [2 2 sym(pi); exp(sym(1)) 5 6]; - x = double (y); - A = dilog (x); - B = double (dilog (y)); - assert (A, B, -eps); -***** test % maple: % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(dilog(a)) end do; + % > for a in A do evalf(Zeta(a)) end do; x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ -0.59248494924959145800 - 1.5760154034463234224*1i - -1.0549087538833908441 - 3.8759788000863368495*1i - -12.192421669033171348 - -2.9195729380904939394 - 3.9540920181102973073*1i - 1.6459519160623984119 - 0.00032335296277550987686*1i - -1.5445800511775466879 + 9.4256034277816069684*1i ]; - B = dilog (x); + A = [ 0.59816556976238173670 - 0.35185474521784529050*1i + 0.21425967567391921717 + 0.52503846985036050707*1i + 1.0 + 1.7564685929749629608 - 0.10151198543617116894*1i + -0.49990811617645824900 - 0.91873792757763831501e-6*1i + 175.09070083717643866 - 71.512541417467273425*1i ]; + B = zeta (x); assert (A, B, -eps) -3 tests, 3 passed, 0 known failure, 0 skipped +5 tests, 5 passed, 0 known failure, 0 skipped [inst/@double/harmonic.m] >>>>> /build/octave-symbolic-2.7.1/inst/@double/harmonic.m ***** test @@ -3100,336 +2773,328 @@ B = double (harmonic (y)); assert (A, B, -4*eps); 2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@double/polylog.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/polylog.m -***** error polylog ([1 2], [1 2 3]) -***** error polylog ([1 2], [1; 2]) -***** error polylog (1, 2, 3) -***** error polylog (1) -***** test - y = sym(11)/10; - t = sym(2); - x = 1.1; - s = 2; - A = polylog (s, x); - B = double (polylog (t, y)); - assert (A, B, -eps); -***** test - % maple - A = 2.3201804233130983964 - 3.4513922952232026614*1i; - B = polylog (2, 3); - assert (A, B, -eps) +[inst/vpasolve.m] +>>>>> /build/octave-symbolic-2.7.1/inst/vpasolve.m ***** test - % maple, complex inputs - A = -11.381456201167411758 + 6.2696695219721651947*1i; - B = polylog (1+2i, 3+4i); - assert (A, B, -eps); + syms x + vpi = vpa(sym(pi), 64); + e = tan(x/4) == 1; + q = vpasolve(e, x, 3.0); + w = q - vpi ; + assert (double(w) < 1e-30) ***** test - % maple, matrix inputs - A1 = 0.47961557317612748431 - 0.52788287823025778869*1i; - A2 = -0.0049750526563452645369 - 0.024579343612396884851*1i; - B = polylog ([-1-2i -3], [30+40i 40i]); - assert ([A1 A2], B, -eps); + syms x + vpi = vpa(sym(pi), 64); + e = tan(x/4) == 1; + q = vpasolve(e, x); + w = q - vpi; + assert (double(w) < 1e-30) + q = vpasolve(e); + w = q - vpi; + assert (double(w) < 1e-30) ***** test - % x matrix, s scalar - y = [1 2 sym(pi); exp(sym(1)) 5 6]; - t = sym(2); - x = double (y); - s = 2; - A = polylog (s, x); - B = double (polylog (t, y)); - assert (A, B, -eps); + % very accurate pi + syms x + e = tan(x/4) == 1; + m = digits(256); + q = vpasolve(e, x, 3); + assert (double(abs(sin(q))) < 1e-256) + digits(m); ***** test - % s matrix, x scalar - t = [1 2 sym(pi); exp(sym(1)) 5 6]; - y = sym(2); - s = double (t); - x = 2; - A = polylog (s, x); - B = double (polylog (t, y)); - assert (A, B, -eps); -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@double/fresnelc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/fresnelc.m + % very accurate sqrt 2 + syms x + e = x*x == 2; + m = digits(256); + q = vpasolve(e, x, 1.5); + assert (double(abs(q*q - 2)) < 1e-256) + digits(m); ***** test - x = 1.1; - y = sym(11)/10; - A = fresnelc (x); - B = double (fresnelc (y)); - assert (A, B, -4*eps); + % very accurate sqrt pi + % (used to fail https://github.com/sympy/sympy/issues/8564) + syms x + e = x*x == sym(pi); + m = digits(256); + q = vpasolve(e, x, 3); + assert (double(abs(sin(q*q))) < 1e-256) + digits(m); ***** test - y = [2 3 sym(pi); exp(sym(1)) 5 6]; - x = double (y); - A = fresnelc (x); - B = double (fresnelc (y)); - assert (A, B, -4*eps); + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x + r = vpasolve(x^2 + 2 == 0, x, 1i); + assert (double (imag(r)^2 - 2), 0, 1e-32) + assert (double (real(r)^2), 0, 1e-32) + r = vpasolve(x^2 + 2 == 0, x, -3i + 5); + assert (double (imag(r)^2 - 2), 0, 1e-32) + assert (double (real(r)^2), 0, 1e-32) + end ***** test - % maple: - % > A := [1+2*I, -2 + 5*I, 100, 10*I, -1e-4 + 1e-6*I, -20 + I]; - % > for a in A do evalf(FresnelC(a)) end do; - x = [1+2i; -2+5i; 100; 10i; -1e-4 + 1e-6*1i; -20-1i]; - A = [ 16.087871374125480424 - 36.225687992881650217*1i - 0.47688568479874574722e12 + 0.12213736710985573216e13*1i - 0.49999989867881789756 - 0.49989869420551572361*1i - -0.000099999999999999997535 + 0.99999999999999987665e-6*1i - 0.15391592966931193100e26 - 0.75738824160998910388e24*1i ]; - B = fresnelc (x); - assert (A, B, -eps) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@double/pochhammer.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@double/pochhammer.m -***** error pochhammer ([1 2], [1 2 3]) -***** error pochhammer ([1 2], [1; 2]) -***** error pochhammer (1, 2, 3) -***** error pochhammer (1) + % system + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x y + f = 3*x^2 - 2*y^2 - 1; + g = x^2 - 2*x + y^2 + 2*y - 8; + r = vpasolve([f; g], [x; y], sym([-1; 1])); + assert (isa (r, 'sym')) + assert (numel (r) == 2) + end ***** test - y = sym(11)/10; - t = sym(3); - x = 1.1; - s = 3; - A = pochhammer (x, s); - B = double (pochhammer (y, t)); - assert (A, B, -2*eps); + % system, double guess + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x y + f = 3*x^2 - 2*y^2 - 1; + g = x^2 - 2*x + y^2 + 2*y - 8; + r = vpasolve([f; g], [x; y], [-1.1 1.2]); + end ***** test - % maple - A = 256.798558090310131720; - B = pochhammer (18.1, 1.9); - assert (A, B, -20*eps) + % system, double guess + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x y + f = 3*x^2 - 2*y^2 - 1; + g = x^2 - 2*x + y^2 + 2*y - 8; + r1 = vpasolve([f; g], [x; y], [-1.1]); + r2 = vpasolve([f; g], [x; y], [-1.1 -1.1]); + assert (isequal (r1, r2)) + end ***** test - % maple, complex inputs> - A = 2.67921619474318221972 + 1.96716724764630702653*1i; - B = pochhammer (12.1+3.1*i, 0.5+0.2i); - assert (A, B, -4*eps); + % system, more eqns than unknowns + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x y + eqns = [x^3 - x - y == 0; y*exp(x) == 16; log(y) + x == 4*log(sym(2))]; + r = vpasolve (eqns, [x; y], [1; 1]); + A = subs (lhs (eqns), [x; y], r); + err = A - [0; 16; 4*log(sym(2))]; + assert (double (err), zeros (size (err)), 1e-31) + end +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/assumptions.m] +>>>>> /build/octave-symbolic-2.7.1/inst/assumptions.m ***** test - % maple, matrix inputs - A = [5.61467232547723663908 20.6144884613920190965]; - B = pochhammer ([0.9 0.8], [3.1 4.2]); - assert (A, B, -3*eps); -***** xtest - % broken upstream, https://github.com/sympy/sympy/issues/14822 - % x matrix, s scalar - y = [1 2 sym(pi); exp(sym(1)) 5 6]; - t = sym(2); - x = double (y); - s = 2; - A = pochhammer (s, x); - B = double (pochhammer (t, y)); - assert (A, B, -eps); -!!!!! known failure -ASSERT errors for: assert (A,B,-eps) - - Location | Observed | Expected | Reason - (2,1) 15.8429 15.8429 Rel err 2.2425e-16 exceeds tol 2.2204e-16 by 2e-18 - (1,3) 29.7701 29.7701 Rel err 2.3868e-16 exceeds tol 2.2204e-16 by 2e-17 + syms x + assert(isempty(assumptions(x))) ***** test - % s matrix, x scalar - t = [1 2 sym(pi); exp(sym(1)) 5 6]; - y = sym(2); - s = double (t); - x = 2; - A = pochhammer (s, x); - B = double (pochhammer (t, y)); - assert (A, B, -5*eps); -10 tests, 9 passed, 1 known failure, 0 skipped -[inst/dirac.m] ->>>>> /build/octave-symbolic-2.7.1/inst/dirac.m -***** assert (isinf (dirac (0))) -***** assert (dirac (1) == 0) -***** assert (isnan (dirac (nan))) -***** assert (isequaln (dirac ([-1 1 0 eps inf -inf nan]), [0 0 inf 0 0 0 nan])) -***** error dirac (1i) -***** assert (isa (dirac (single (0)), 'single')) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/vpa.m] ->>>>> /build/octave-symbolic-2.7.1/inst/vpa.m + x = sym('x', 'positive'); + a = assumptions(x); + assert(~isempty(strfind(a{1}, 'positive'))) ***** test - a = vpa(0, 4); - b = double(a); - assert(b == 0) + syms x + assert(isempty(assumptions(x))) ***** test - a = vpa(pi, 4); - b = sin(a); - assert(abs(double(b)) < 1e-4) + clear variables % for matlab test script + syms x positive + assert(~isempty(assumptions())) + clear x + assert(isempty(assumptions())) ***** test - % vpa from double is ok, doesn't warn (c.f., sym(2.3)) - a = vpa(2.3); - assert(true) + % make sure we have at least these possible assumptions + A = {'real' 'positive' 'negative' 'integer' 'even' 'odd' 'rational'}; + B = assumptions('possible'); + assert (isempty (setdiff(A, B))) ***** test - % vpa from double not more than 16 digits - a = vpa(sqrt(pi), 32); - b = sin(a^2); - assert(abs(double(b)) > 1e-20) - assert(abs(double(b)) < 1e-15) + A = assumptions('possible'); + for i = 1:length(A) + x = sym('x', A{i}); + a = assumptions(x); + assert(strcmp(a{1}, ['x: ' A{i}] )) + s1 = sympy (x); + s2 = ['Symbol(''x'', ' A{i} '=True)']; + assert (strcmp (s1, s2)) + end ***** test - a = vpa(sym(pi), 32); - b = sin(a); - assert(abs(double(b)) < 1e-30) + syms x positive + syms y real + syms z + f = x*y*z; + a = assumptions(f); + assert(length(a) == 2) + assert(~isempty(strfind(a{1}, 'positive'))) + assert(~isempty(strfind(a{2}, 'real'))) ***** test - a = vpa(sym(pi), 256); - b = sin(a); - assert(abs(double(b)) < 1e-256) + % dict output + syms x positive + syms y real + syms z + f = x*y*z; + [v, d] = assumptions(f, 'dict'); + assert(length(v) == 2) + assert(iscell(v)) + assert(isa(v{1}, 'sym')) + assert(isa(v{2}, 'sym')) + assert(length(d) == 2) + assert(iscell(d)) + assert(isstruct(d{1})) + assert(isstruct(d{2})) ***** test - % pi str - a = vpa('pi', 32); - b = sin(a); - assert(abs(double(b)) < 1e-32) + %% assumptions on just the vars in an expression + clear variables % for matlab test script + syms x y positive + f = 2*x; + assert(length(assumptions(f))==1) + assert(length(assumptions())==2) ***** test - % pi str - a = vpa('pi', 32); - b = vpa(sym('pi'), 32); - assert (double (a - b) == 0) + %% assumptions in cell/struct + clear variables % for matlab test script + syms x y z w positive + f = {2*x [1 2 y] {1, {z}}}; + assert(length(assumptions())==4) + assert(length(assumptions(f))==3) + clear x y z w + assert(length(assumptions())==3) + assert(length(assumptions(f))==3) ***** test - spi = sym(pi); - a = vpa(spi, 10); - b = double(a); - assert(~isAlways(spi == a)) + % multiple assumptions + n = sym('n', 'negative', 'even'); + assert (logical (n < 0)) + assert (~(logical (n > 0))) + assert (~(logical (n == -1))) ***** test - % matrix of sym - a = [sym(pi) 0; sym(1)/2 1]; - b = [pi 0; 0.5 1]; - c = vpa(a, 6); - assert(max(max(abs(double(c)-b))) < 1e-6) + % multiple assumptions: eqn neither true nor false + n = sym('n', 'negative', 'even'); + assert (~isequal (n, sym(true)) && ~isequal (n, sym(false))) ***** test - % matrix of double - b = [pi 0; 0.5 1]; - c = vpa(b, 6); - assert(max(max(abs(double(c)-b))) < 1e-6) + %% TODO: rewrite later with https://github.com/cbm755/octsympy/issues/622 + a = python_cmd ('return Symbol("a", real=False)'); + assert (strcmp (assumptions (a), {'a: ~real'})) +13 tests, 13 passed, 0 known failure, 0 skipped +[inst/findsymbols.m] +>>>>> /build/octave-symbolic-2.7.1/inst/findsymbols.m ***** test - % integer type - a = vpa(int32(6), 64); - b = vpa(6, 64); - assert (isequal (a, b)) + syms x b y n a arlo + z = a*x + b*pi*sin (n) + exp (y) + exp (sym (1)) + arlo; + s = findsymbols (z); + assert (isequal ([s{:}], [a,arlo,b,n,x,y])) ***** test - % matrix of int - b = int32([pi 0; 6.25 1]); - c = vpa(b, 6); - assert (isequal (double(c), [3 0; 6 1])) + syms x + s = findsymbols (x); + assert (isequal (s{1}, x)) ***** test - % can pass pi directly to vpa - a = vpa(sym(pi), 128); - b = vpa(pi, 128); - assert (isequal (a, b)) + syms z x y a + s = findsymbols ([x y; 1 a]); + assert (isequal ([s{:}], [a x y])) +***** assert (isempty (findsymbols (sym (1)))) +***** assert (isempty (findsymbols (sym ([1 2])))) +***** assert (isempty (findsymbols (sym (nan)))) +***** assert (isempty (findsymbols (sym (inf)))) +***** assert (isempty (findsymbols (exp (sym (2))))) ***** test - % if sym does sth special for e so should vpa - a = vpa(sym(exp(1)), 64); - b = vpa(exp(1), 64); - assert (isequal (a, b)) + % empty sym for findsymbols, findsym, and symvar + assert (isempty (findsymbols (sym([])))) + assert (isempty (findsym (sym([])))) + assert (isempty (symvar (sym([])))) ***** test - % can pass pi directly to vpa, even in array - a = vpa(sym([2 pi]), 128); - b = vpa([2 pi], 128); - assert (isequal (a, b)) + % diff. assumptions make diff. symbols + x1 = sym('x'); + x2 = sym('x', 'positive'); + f = x1*x2; + assert (length (findsymbols (f)) == 2) ***** test - % can pass i directly to vpa - a = vpa(sym(i)); - b = vpa(i); + % symfun or sym + syms x f(y) + a = f*x; + b = f(y)*x; + assert (isequal (findsymbols(a), {x y})) + assert (isequal (findsymbols(b), {x y})) ***** test - % 'i' and 'I' just make vars - a = vpa(sym(1i)); - b = vpa('i'); - c = vpa('I'); - assert (~isequal (a, b)) - assert (~isequal (a, c)) + % findsymbols on symfun does not find the argnames (unless they + % are on the RHS of course, this matches SMT 2014a). + syms a x y + f(x, y) = a; % const symfun + assert (isequal (findsymbols(f), {a})) + syms a x y + f(x, y) = a*y; + assert (isequal (findsymbols(f), {a y})) ***** test - % '1i' and '1j' strings - a = vpa(sym(1i)); - b = vpa('1i'); - c = vpa('1j'); - assert (isequal (a, b)) - assert (isequal (a, c)) + % sorts lexigraphically, same as symvar *with single input* + % (note symvar does something different with 2 inputs). + syms A B a b x y X Y + f = A*a*B*b*y*X*Y*x; + assert (isequal (findsymbols(f), {A B X Y a b x y})) + assert (isequal (symvar(f), [A B X Y a b x y])) ***** test - % Issue #868, precision loss on '0.33j' - a = vpa('0.33j', 40); - b = vpa('0.33i', 40); - assert (double (abs (imag (a)*100/33) - 1) < 1e-39) - assert (isequal (a, b)) + % symbols in matpow + syms x y + syms n + A = [sin(x) 2; y 1]; + B = A^n; + L = findsymbols(B); + assert (isequal (L, {n x y})) +14 tests, 14 passed, 0 known failure, 0 skipped +[inst/syms.m] +>>>>> /build/octave-symbolic-2.7.1/inst/syms.m ***** test - % inf/-inf do not become symbol('inf') - S = {'oo', '-oo', 'inf', 'Inf', '-inf', '+inf'}; - for j = 1:length(S) - a = vpa(S{j}); - b = vpa(sym(S{j})); - assert (isequal (a, b)) - end + %% assumptions + syms x real + x2 = sym('x', 'real'); + assert (isequal (x, x2)) ***** test - a = vpa('2.3', 20); - s = strtrim(disp(a, 'flat')); - assert (strcmp (s, '2.3000000000000000000')) + %% assumptions and clearing them + syms x real + f = {x {2*x}}; + A = assumptions(); + assert ( ~isempty(A)) + s = warning ('off', 'OctSymPy:deprecated'); + syms x clear + warning (s) + A = assumptions(); + assert ( isempty(A)) ***** test - % these should *not* be the same - a = vpa(2.3, 40); - b = vpa('2.3', 40); - sa = sympy (a); - sb = sympy (b); - assert (~isequal (a, b)) - assert (abs(double(a - b)) > 1e-20) - assert (abs(double(a - b)) < 1e-15) - assert (~strcmp(sa, sb)) + % SMT compat, syms x clear should add x to workspace + syms x real + f = 2*x; + clear x + assert (~logical(exist('x', 'var'))) + s = warning ('off', 'OctSymPy:deprecated'); + syms x clear + warning (s) + assert (logical(exist('x', 'var'))) +***** error + syms x positive y +***** error + % this sometimes catches typos or errors in assumption names + % (if you need careful checking, use sym not syms) + syms x positive evne +***** error + syms x positive clear +***** error + syms x clear y +***** error + syms positive integer ***** test - % these should *not* be the same - x = vpa('1/3', 32); - y = vpa(sym(1)/3, 32); - z = vpa(1/3, 32); - assert (isequal (x, y)) - assert (~isequal (x, z)) + % does not create a variable called positive + syms x positive integer + assert (logical(exist('x', 'var'))) + assert (~logical(exist('positive', 'var'))) ***** test - % big integers - a = int64(12345678); - a = a*a; - b = vpa(a); - c = vpa('152415765279684'); - assert (isequal (b, c)) + % Issue #885 + syms S(x) I(x) O(x) ***** test - % big integers (workaround poor num2str, works in 4.0?) - a = int64(1234567891); a = a*a; - b = vpa(a); - c = vpa('1524157877488187881'); - assert (isequal (b, c)) -***** warning vpa ('sqrt(2.0)'); -***** warning - % https://github.com/sympy/sympy/issues/13425 - a = vpa('2**0.5'); - b = vpa(sqrt(sym(2))); - assert (isequal (a, b)) + % Issue #290 + syms FF(x) + syms ff(x) + syms Eq(x) ***** test - a = vpa('2.3e1'); - b = vpa(' 2.3e+1 '); - assert (isequal (a, b)) - a = vpa('21e-1'); - b = vpa('2.1'); - assert (isequal (a, b)) + % Issue #290 + syms beta(x) ***** test - % Issue #859, operations on immutable matrices - x = vpa (sym ([1 2])); - % If vpa no longer makes an ImmutableDenseMatrix, - % may need to adjust or remove this test. - assert (~ isempty (strfind (sympy (x), 'Immutable'))) - y = sin(x); - y2 = [sin(vpa(sym(1))) sin(vpa(sym(2)))]; - assert (isequal (y, y2)) -30 tests, 30 passed, 0 known failure, 0 skipped -[inst/octsympy_tests.m] ->>>>> /build/octave-symbolic-2.7.1/inst/octsympy_tests.m -***** assert(true) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/finiteset.m] ->>>>> /build/octave-symbolic-2.7.1/inst/finiteset.m + syms x real + syms f(x) + assert (~ isempty (assumptions (x))) ***** test - s1 = finiteset(sym(1), 2, 2); - s2 = finiteset(sym(1), 2, 2, 2); - assert (isequal (s1, s2)) + syms x real + f(x) = symfun(sym('f(x)'), x); + assert (~ isempty (assumptions (x))) + assert (~ isempty (assumptions (argnames (f)))) +14 tests, 14 passed, 0 known failure, 0 skipped +[inst/cell2sym.m] +>>>>> /build/octave-symbolic-2.7.1/inst/cell2sym.m ***** test - s1 = finiteset(sym(0), 1); - s2 = finiteset(sym(0), 2, 3); - s = finiteset(sym(0), 1, 2, 3); - assert (isequal (s1 + s2, s)) + A = {1 2 3; 4 5 6}; + B = [1 2 3; 4 5 6]; + assert (isequal (cell2sym(A), sym(B))) ***** test - e = finiteset(); - s = finiteset(sym(1)); - s2 = e + s; - assert (isequal (s, s2)) -3 tests, 3 passed, 0 known failure, 0 skipped + A = {'a' 'b'; 'c' 10}; + B = [sym('a') sym('b'); sym('c') sym(10)]; + assert (isequal (cell2sym(A), B)) +2 tests, 2 passed, 0 known failure, 0 skipped [inst/digits.m] >>>>> /build/octave-symbolic-2.7.1/inst/digits.m ***** test @@ -3444,6 +3109,257 @@ assert (abs (double (sin(p))) > 1e-40) digits(orig) 1 test, 1 passed, 0 known failure, 0 skipped +[inst/@logical/isAlways.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@logical/isAlways.m +***** error isAlways (true, false) +***** assert(isAlways(true)) +***** assert(~isAlways(false)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/python_cmd.m] +>>>>> /build/octave-symbolic-2.7.1/inst/python_cmd.m +***** test + % general test + x = 10; y = 6; + cmd = '(x,y) = _ins; return (x+y,x-y)'; + [a,b] = python_cmd (cmd, x, y); + assert (a == x + y && b == x - y) +***** test + % bool + assert (python_cmd ('return True,')) + assert (~python_cmd ('return False,')) +***** test + % float + assert (abs(python_cmd ('return 1.0/3,') - 1/3) < 1e-15) +***** test + % int + r = python_cmd ('return 123456'); + assert (r == 123456) + assert (isinteger (r)) +***** test + % long (on python2) + r = python_cmd ('return 42 if sys.version_info >= (3,0) else long(42)'); + assert (r == 42) + assert (isinteger (r)) +***** test + % string + x = 'octave'; + cmd = 's = _ins[0]; return s.capitalize(),'; + y = python_cmd (cmd, x); + assert (strcmp(y, 'Octave')) +***** test + % string with escaped newlines, comes back as escaped newlines + x = 'a string\nbroke off\nmy guitar\n'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % string with actual newlines, comes back as actual newlines + x = sprintf('a string\nbroke off\nmy guitar\n'); + y = python_cmd ('return _ins', x); + y2 = strrep(y, sprintf('\n'), sprintf('\r\n')); % windows + assert (strcmp(x, y) || strcmp(x, y2)) +***** test + % cmd string with newlines, works with cell + y = python_cmd ('return "string\nbroke",'); + y2 = sprintf('string\nbroke'); + y3 = strrep(y2, sprintf('\n'), sprintf('\r\n')); % windows + assert (strcmp(y, y2) || strcmp(y, y3)) +***** test + % string with XML escapes + x = '<> >< <<>>'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) + x = '&'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % strings with double quotes + x = 'a\"b\"c'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) + x = '\"'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % cmd has double quotes, these must be escaped by user + % (of course: she is writing python code) + expy = 'a"b"c'; + y = python_cmd ('return "a\"b\"c",'); + assert (strcmp(y, expy)) +***** test + % strings with quotes + x = 'a''b'; % this is a single quote + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % strings with quotes + x = '\"a''b\"c''\"d'; + y = python_cmd ('return _ins[0]', x); + assert (strcmp(y, x)) +***** test + % strings with quotes + expy = '"a''b"c''"d'; + y = python_cmd ('s = "\"a''b\"c''\"d"; return s'); + assert (strcmp(y, expy)) +***** test + % strings with printf escapes + x = '% %% %%% %%%% %s %g %%s'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % cmd with printf escapes + x = '% %% %%% %%%% %s %g %%s'; + y = python_cmd (['return "' x '",']); + assert (strcmp(y, x)) +***** test + % cmd w/ backslash and \n must be escaped by user + expy = 'a\b\\c\nd\'; + y = python_cmd ('return "a\\b\\\\c\\nd\\",'); + assert (strcmp(y, expy)) +***** test + % slashes + x = '/\\ // \\\\ \\/\\/\\'; + z = '/\ // \\ \/\/\'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % slashes + z = '/\ // \\ \/\/\'; + y = python_cmd ('return "/\\ // \\\\ \\/\\/\\"'); + assert (strcmp(y, z)) +***** test + % strings with special chars + x = '!@#$^&* you!'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) + x = '~-_=+[{]}|;:,.?'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** xtest + % string with backtick trouble for system -c (sysoneline) + x = '`'; + y = python_cmd ('return _ins', x); + assert (strcmp(y, x)) +***** test + % unicode + s1 = '我爱你'; + cmd = 'return u"\u6211\u7231\u4f60",'; + s2 = python_cmd (cmd); + assert (strcmp (s1, s2)) +***** test + % unicode with \x + s1 = '我'; + cmd = 'return b"\xe6\x88\x91".decode("utf-8")'; + s2 = python_cmd (cmd); + assert (strcmp (s1, s2)) +***** test + % unicode with \x and some escaped backslashes + s1 = '\我\'; + cmd = 'return b"\\\xe6\x88\x91\\".decode("utf-8")'; + s2 = python_cmd (cmd); + assert (strcmp (s1, s2)) +***** xtest + % unicode passthru + s = '我爱你'; + s2 = python_cmd ('return _ins', s); + assert (strcmp (s, s2)) + s = '我爱你<>\&//\#%% %\我'; + s2 = python_cmd ('return _ins', s); + assert (strcmp (s, s2)) +***** xtest + % unicode w/ slashes, escapes + s = '我<>\&//\#%% %\我'; + s2 = python_cmd ('return "我<>\\&//\\#%% %\\我"'); + assert (strcmp (s, s2)) +***** test + % list, tuple + assert (isequal (python_cmd ('return [1,2,3],'), {1, 2, 3})) + assert (isequal (python_cmd ('return (4,5),'), {4, 5})) + assert (isequal (python_cmd ('return (6,),'), {6,})) + assert (isequal (python_cmd ('return [],'), {})) +***** test + % dict + cmd = 'd = dict(); d["a"] = 6; d["b"] = 10; return d,'; + d = python_cmd (cmd); + assert (d.a == 6 && d.b == 10) +***** test + r = python_cmd ('return 6'); + assert (isequal (r, 6)) +***** test + r = python_cmd ('return "Hi"'); + assert (strcmp (r, 'Hi')) +***** test + % blank lines, lines with spaces + a = python_cmd({ '', '', ' ', 'return 6', ' ', ''}); + assert (isequal (a, 6)) +***** test + % blank lines, strange comment lines + cmd = {'a = 1', '', '#', '', '# ', ' #', 'a = a + 2', ' #', 'return a'}; + a = python_cmd(cmd); + assert (isequal (a, 3)) +***** test + % return empty string (was https://bugs.python.org/issue25270) + assert (isempty (python_cmd ('return ""'))) +***** test + % return nothing (via an empty list) + % note distinct from 'return [],' + python_cmd('return []') +***** test + % return nothing (because no return command) + python_cmd('dummy = 1') +***** test + % return nothing (because no command) + python_cmd('') +***** test + % return nothing (because no command) + python_cmd({}) +***** error + % python exception while passing variables to python + % This tests the "INTERNAL_PYTHON_ERROR" path. + % FIXME: this is a very specialized test, relies on internal octsympy + % implementation details, and may need to be adjusted for changes. + b = sym([], 'S.make_an_attribute_err_exception', [1 1], 'Test', 'Test', 'Test'); + c = b + 1; +Traceback (most recent call last): + File "", line 4, in + File "/usr/lib/python3/dist-packages/sympy/core/singleton.py", line 116, in __getattr__ + name, self)) +AttributeError: Attribute 'make_an_attribute_err_exception' was not installed on SymPy registry S +***** test + % ...and after the above test, the pipe should still work + a = python_cmd('return _ins[0]*2', 3); + assert (isequal (a, 6)) +***** error + % This command does not fail with native interface and '@pyobject' + if (strcmp (sympref ('ipc'), 'native')) + error ('does not know how to export type') + else + python_cmd({'return type(int)'}); + end +Traceback (most recent call last): + File "", line 2, in + File "", line 12, in octoutput_drv + File "", line 99, in octoutput +ValueError: octoutput does not know how to export type +***** test + % ...and after the above test, the pipe should still work + a = python_cmd('return _ins[0]*2', 3); + assert (isequal (a, 6)) +***** test + % complex input + [A, B] = python_cmd ('z = 2*_ins[0]; return (z.real,z.imag)', 3+4i); + assert (A, 6) + assert (B, 8) +***** test + % complex output + z = python_cmd ('return 3+2j'); + assert (z, 3+2i) +***** error + s = char ('abc', 'defgh', '12345'); + r = python_cmd ('return _ins[0]', s); +***** test + r = python_cmd ('return len(_ins[0])', ''); + assert (r == 0) +46 tests, 46 passed, 0 known failure, 0 skipped [inst/evalpy.m] >>>>> /build/octave-symbolic-2.7.1/inst/evalpy.m ***** test @@ -3471,681 +3387,658 @@ assert( isequal (z, {'GNU', 'Octave','Rocks'} )) warning (s) 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/fibonacci.m] ->>>>> /build/octave-symbolic-2.7.1/inst/fibonacci.m -***** assert (isequal ( fibonacci (sym(0)), 0)) -***** assert (isequal ( fibonacci (sym(14)), sym(377))) -***** assert (isequal ( fibonacci (14), 377)) -***** test syms x - assert (isequal (fibonacci (5,x), x^4 + 3*x^2 + 1)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/jordan.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/jordan.m +[inst/@sym/acoth.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acoth.m +***** error acoth (sym(1), 2) +***** assert (isequaln (acoth (sym(nan)), sym(nan))) +***** shared x, d + d = 2; + x = sym('2'); +***** test + f1 = acoth(x); + f2 = acoth(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = acoth(A); + f2 = acoth(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = acoth (d); + f = acoth (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/diff.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/diff.m +***** shared x,y,z + syms x y z ***** test % basic - A = sym ([2 1 0 0; 0 2 1 0; 0 0 3 0; 0 1 -1 3]); - [V, J] = jordan (A); - assert (isequal (inv (V) * A * V, J)); - assert (isequal (J, sym ([2 1 0 0; 0 2 0 0; 0 0 3 0; 0 0 0 3]))) - % the first 2 generalized eigenvectors form a cycle - assert (isequal ((A - J(1, 1) * eye (4)) * V(:, 1), zeros (4, 1))); - assert (isequal ((A - J(2, 2) * eye (4)) * V(:, 2), V(:, 1))); - % the last 2 generalized eigenvectors are eigenvectors - assert (isequal ((A - J(3, 3) * eye (4)) * V(:, 3), zeros (4, 1))); - assert (isequal ((A - J(4, 4) * eye (4)) * V(:, 4), zeros (4, 1))); + assert(logical( diff(sin(x)) - cos(x) == 0 )) + assert(logical( diff(sin(x),x) - cos(x) == 0 )) + assert(logical( diff(sin(x),x,x) + sin(x) == 0 )) ***** test - % scalars - assert (isequal (jordan (sym (-10)), sym (-10))); - assert (isequal (jordan (sym ('x')), sym ('x'))); + % these fail when doubles are not converted to sym + assert(logical( diff(sin(x),x,2) + sin(x) == 0 )) + assert(logical( diff(sym(1),x) == 0 )) + assert(logical( diff(1,x) == 0 )) + assert(logical( diff(pi,x) == 0 )) ***** test - % diagonal matrices - A = diag (sym ([6 6 7])); - [V1, D] = eig (A); - [V2, J] = jordan (A); - assert (isequal (V1, V2)); - assert (isequal (D, J)); + % symbolic diff of const (w/o variable) fails in sympy, but we work around + assert (isequal (diff(sym(1)), sym(0))) ***** test - % matrices of unknown entries - A = [sym('a') sym('b'); sym('c') sym('d')]; - [V, D] = eig (A); - J = jordan (A); - assert (isequal (simplify (D), simplify (J))); + % nth symbolic diff of const + assert (isequal (diff(sym(1), 2), sym(0))) + assert (isequal (diff(sym(1), sym(1)), sym(0))) ***** test - % matrices of mixed entries - A = [sym('x')+9 sym('y'); sym(0) 6]; - [V, D] = eig (A); - J = jordan (A); - assert (isequal (simplify (D), simplify (J))); -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/heaviside.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/heaviside.m -***** error heaviside (sym(1), 2, 3) -***** assert (isequal (heaviside (sym(1)), sym(1))) -***** assert (isequal (heaviside (-sym(1)), sym(0))) -***** assert (double (heaviside (1)), heaviside (1)) + % octave's vector difference still works + assert(isempty(diff(1))) + assert((diff([2 6]) == 4)) ***** test - D = [1 -1; -10 20]; - A = sym(D); - assert (double (heaviside (A)), heaviside (D)) + % other forms + f = sin(x); + g = diff(f,x,2); + assert (isequal (diff(f,2), g)) + assert (isequal (diff(f,sym(2)), g)) + g = diff(f,x); + assert (isequal (diff(f), g)) + assert (isequal (diff(f,1), g)) ***** test - if (python_cmd ('return Version(spver) <= Version("1.0")')) - disp ('skipping test, sympy too old') - else - H0 = sym([1 -2 0; 3 0 pi]); - A = heaviside (sym(0), H0); - assert (isequal (A, H0)) - end + % old SMT supported (still does?) the 'n' before the 'x' + % we might remove this someday, no longer seems documented in SMT + f = sin(x); + g = diff(f,x,2); + assert (isequal (diff(f,2,x), g)) + assert (isequal (diff(f,sym(2),x), g)) + g = diff(f,x); + assert (isequal (diff(f,1,x), g)) ***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - A = heaviside ([-1 0 1], sym(1)/2); - assert (isequal (A, [0 sym(1)/2 1])) - end + % matrix + A = [x sin(x); x*y 10]; + B = [1 cos(x); y 0]; + assert(isequal(diff(A,x),B)) ***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - A = heaviside ([-1 0 1], sym(1)/2); - assert (isequal (A, [0 sym(1)/2 1])) - end -***** assert (isequaln (heaviside (sym(nan)), sym(nan))) + % bug: use symvar + a = x*y; + b = diff(a); + assert (isequal (b, y)) +***** test + % bug: symvar should be used on the matrix, not comp-by-comp + a = [x y x*x]; + b = diff(a); + assert (~isequal (b(2), 1)) + assert (isequal (b, [1 0 2*x])) + b = diff(a,1); + assert (~isequal (b(2), 1)) + assert (isequal (b, [1 0 2*x])) +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/@sym/norm.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/norm.m +***** assert (isequal (norm(sym(-6)), 6)) +***** test + % 2-norm default + A = [1 2; 3 4]; + n1 = norm (sym (A)); + assert (isequal (n1, sqrt (sqrt (sym(221)) + 15))) + assert (norm (A), double (n1), -eps) +***** test + syms x y real + assert (isequal (norm([x 1; 3 y], 'fro'), sqrt(x^2 + y^2 + 10))) +***** test + syms x real + assert (isequal (norm([x 1], 2), sqrt(x^2 + 1))) +***** test + % test sym vs double ord + syms x + assert (isequal (norm([x 2 1], 1), abs(x) + 3)) + assert (isequal (norm([x 2 1], sym(1)), abs(x) + 3)) + assert (isequal (norm([sym(-3) 2 1], inf), sym(3))) + assert (isequal (norm([sym(-3) 2 1], sym(inf)), sym(3))) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/dilog.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/dilog.m +***** assert (isequal (dilog (sym(1)), sym(0))) +***** assert (isequal (dilog (sym(0)), sym(pi)^2/6)) ***** test if (python_cmd ('return Version(spver) > Version("1.0")')) - assert (isequaln (heaviside (sym(nan), sym(nan)), sym(nan))) - assert (isequaln (heaviside (0, sym(nan)), sym(nan))) - assert (isequaln (heaviside (2, sym(nan)), sym(1))) - assert (isequaln (heaviside (-2, sym(nan)), sym(0))) + assert (isequal (dilog (sym(2)), -sym(pi)^2/12)) end +***** assert (double(dilog(sym(-1))), pi^2/4 - pi*1i*log(2), eps) ***** test - % round trip + % round-trip + if (python_cmd ('return Version(spver) > Version("1.0")')) syms x - A = heaviside (1); - f = heaviside (x); + f = dilog (x); h = function_handle (f); - B = h (1); - assert (A, B, -eps) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x h0 - f = heaviside (x, h0); - h = function_handle (f, 'vars', {x h0}); - A = heaviside (1, 1/2); - B = h (1, 1/2); - assert (A, B, -eps) - A = heaviside (0, 1/2); - B = h (0, 1/2); + A = h (1.1); + B = dilog (1.1); assert (A, B, -eps) end -12 tests, 12 passed, 0 known failure, 0 skipped -[inst/@sym/mrdivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/mrdivide.m +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/repmat.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/repmat.m ***** test - % scalar + % simple syms x - assert (isa( x/x, 'sym')) - assert (isequal( x/x, sym(1))) - assert (isa( 2/x, 'sym')) - assert (isa( x/2, 'sym')) -***** test - % matrix / scalar - D = 2*[0 1; 2 3]; - A = sym(D); - assert (isequal ( A/2 , D/2 )) - assert (isequal ( A/sym(2) , D/2 )) -***** test - % I/A: either invert A or leave unevaluated: not bothered which - A = sym([1 2; 3 4]); - B = sym(eye(2)) / A; - assert (isequal (B, inv(A)) || strncmpi (sympy (B), 'MatPow', 6)) -***** xtest - % immutable test, upstream: TODO - A = sym([1 2; 3 4]); - B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); - assert (isequal (A/A, B/B)) -!!!!! known failure -Python exception: NotImplementedError - occurred at line 1 of the Python code block: - return _ins[0]/_ins[1], -***** test - % A = C/B is C = A*B - A = sym([1 2; 3 4]); - B = sym([1 3; 4 8]); - C = A*B; - A2 = C / B; - assert (isequal (A, A2)) -***** test - A = [1 2; 3 4]; - B = A / A; - % assert (isequal (B, sym(eye(2)) - assert (isequal (B(1,1), 1)) - assert (isequal (B(2,2), 1)) - assert (isequal (B(2,1), 0)) - assert (isequal (B(1,2), 0)) + A = [x x x; x x x]; + assert (isequal (repmat(x, 2, 3), A)) ***** test - A = sym([5 6]); - B = sym([1 2; 3 4]); - C = A*B; - A2 = C / B; - assert (isequal (A, A2)) -7 tests, 6 passed, 1 known failure, 0 skipped -[inst/@sym/dawson.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/dawson.m + % block cf double + A = [1 2 3; 4 5 6]; + B = sym(A); + C = repmat(A, 2, 3); + D = repmat(B, 2, 3); + assert (isequal (C, D)) ***** test - if (exist ('OCTAVE_VERSION', 'builtin')) - % dawson missing on Matlab, Issue #742 - A = dawson([1 2]); - B = double(dawson(sym([1 2]))); - assert(A, B, -eps) - end -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/findsym.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/findsym.m -***** assert (strcmp (findsym (sym(2)), '')); -***** shared x,y,f - x=sym('x'); y=sym('y'); f=x^2+3*x*y-y^2; -***** assert (strcmp (findsym (f), 'x,y')); -***** assert (strcmp (findsym (f,1), 'x')); + % empty + A = repmat(sym([]), 2, 3); + assert (isempty(A)); + assert (isequal (size(A), [0 0])) ***** test - % test order of returned vars - syms x y a b c xx - % https://www.mathworks.com/matlabcentral/newsreader/view_thread/237730 - alpha = sym('alpha'); - assert (strcmp (findsym(b*xx*exp(alpha) + c*sin(a*y), 2), 'xx,y')) + % more empties + A = repmat(sym(pi), [0 0]); + assert (isequal (size(A), [0 0])) + A = repmat(sym(pi), [0 3]); + assert (isequal (size(A), [0 3])) + A = repmat(sym(pi), [2 0]); + assert (isequal (size(A), [2 0])) 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/uminus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/uminus.m +[inst/@sym/rdivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rdivide.m ***** test % scalar syms x - assert (isa (-x, 'sym')) - assert (isequal (-(-x), x)) + assert (isa (x ./ 1, 'sym')) + assert (isa (x ./ x, 'sym')) + assert (isequal (x ./ 1, x)) + assert (isequal (x ./ x, sym(1))) ***** test - % matrix - D = [0 1; 2 3]; + % matrix-scalar + D = 2*[0 1; 2 3]; A = sym(D); - assert( isequal( -A, -D )) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/degree.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/degree.m -***** error degree (sym(1), 2, 3) + assert (isequal ( A./2 , D/2 )) + assert (isequal ( A./sym(2) , D/2 )) + assert (isequal ( D./sym(2) , D/2 )) ***** test - syms x - assert (isequal (degree(x^3), 3)) - assert (isequal (degree(x^3 + 6), 3)) + % matrix ./ matrix + D = [1 2; 3 4]; + A = sym(D); + assert (isequal ( A./A , D./D )) + assert (isequal ( A./D , D./D )) + assert (isequal ( D./A , D./D )) ***** test - % specify variable + % matrix ./ matrix with symbols syms x y - p = x^2 + y*x + 1; - assert (isequal (degree(p), 2)) - assert (isequal (degree(p, x), 2)) - assert (isequal (degree(p, y), 1)) + A = [x y; x^2 2*y]; + B = [y x; x y]; + assert (isequal ( A./A , sym(ones(2,2)) )) + assert (isequal ( A./B , [x/y y/x; x 2] )) ***** test - syms x a oo - assert (isequal (degree(x^3, a), 0)) - assert (isequal (degree(sym(1), a), 0)) - assert (isequal (degree(sym(0), a), -oo)) -***** xtest - % constant inputs - syms oo - assert (isequal (degree(sym(1)), 0)) - assert (isequal (degree(sym(0)), -oo)) + % scalar ./ matrix + D = [1 2; 3 4]; + A = sym(D); + assert (isequal ( 12./A , 12./D )) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/colon.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/colon.m -***** test - a = sym(1):5; - b = sym(1:5); - assert(isequal(a,b)); - a = 1:sym(5); - b = sym(1:5); - assert(isequal(a,b)); -***** test - a = 2:sym(2):8; - b = sym(2:2:8); - assert(isequal(a,b)); -***** test - a = sym(10):-2:-4; - b = sym(10:-2:-4); - assert(isequal(a,b)); +[inst/@sym/sum.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sum.m +***** error sum (sym(1), 2, 3) +***** error sum (sym(1), 42) +***** shared x,y,z + syms x y z +***** assert (isequal (sum (x), x)) +***** assert (isequal (sum ([x y z]), x+y+z)) +***** assert (isequal (sum ([x; y; z]), x+y+z)) +***** assert (isequal (sum ([x y z], 1), [x y z])) +***** assert (isequal (sum ([x y z], 2), x+y+z)) +***** shared a,b + b = [1 2; 3 4]; a = sym(b); +***** assert (isequal (sum(a), sum(b))) +***** assert (isequal (sum(a,1), sum(b,1))) +***** assert (isequal (sum(a,2), sum(b,2))) ***** test - % symbolic intervals - p = sym(pi); - L = 0:p/4:p; - assert(isa(L,'sym')); - assert(isequal(L, [0 p/4 p/2 3*p/4 p])); + % weird inputs + a = sum('xx', sym(1)); + assert (isequal (a, sym('xx'))) +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/lgamma.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/lgamma.m ***** test - % mixed symbolic and double intervals - p = sym(pi); - s = warning ('off', 'OctSymPy:sym:rationalapprox'); - L = 0.1:(sym(pi)/3):2.3; - warning(s) - assert(isa(L,'sym')); - t = sym(1)/10; - assert(isequal(L, [t p/3+t 2*p/3+t])); -***** error syms x; a = 0:x; -***** error syms x; a = 1:x; -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/tan.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/tan.m -***** error tan (sym(1), 2) -***** assert (isequaln (tan (sym(nan)), sym(nan))) + % tested by gammaln + assert (isequal (lgamma (sym ('x')), gammaln (sym ('x')))) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/coshint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/coshint.m +***** error coshint (sym(1), 2) +***** xtest + assert (isequaln (coshint (sym(nan)), sym(nan))) +!!!!! known failure +assert (isequaln (coshint (sym (nan)), sym (nan))) failed ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = tan(x); - f2 = tan(d); + f1 = coshint(x); + f2 = 0.8378669409802082408947; assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = tan(A); - f2 = tan(D); + f1 = coshint(A); + f2 = 0.8378669409802082408947; + f2 = [f2 f2; f2 f2]; assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = tan (d); - f = tan (y); + A = coshint (d); + f = coshint (y); h = function_handle (f); B = h (d); assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/jacobian.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/jacobian.m -***** shared x,y,z - syms x y z -***** test - % 1D - f = x^2; - assert (isequal (jacobian(f), diff(f,x))) - assert (isequal (jacobian(f,{x}), diff(f,x))) - assert (isequal (jacobian(f,x), diff(f,x))) -***** test - % const - f = sym(1); - g = sym(0); - assert (isequal (jacobian(f), g)) - assert (isequal (jacobian(f,x), g)) + end +5 tests, 4 passed, 1 known failure, 0 skipped +[inst/@sym/isempty.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isempty.m +***** shared se, a + se = sym ([]); + a = sym ([1 2]); +***** assert (~isempty (sym (1))) +***** assert (isempty (sym (se))) +***** assert (isempty (se == [])) ***** test - % double const - f = 1; - g = sym(0); - assert (isequal (jacobian(f,x), g)) +***** test se(1) = 10; +***** test assert ( isa (se, 'sym')) +***** test assert ( isequal (se, 10)) +***** shared ***** test - % diag - f = [x y^2]; - g = [sym(1) 0; 0 2*y]; - assert (isequal (jacobian(f), g)) - assert (isequal (jacobian(f, [x y]), g)) - assert (isequal (jacobian(f, {x y}), g)) + % empty matrices + A = sym('A', [3 0]); + assert (isempty (A)) + A = sym(ones(3,0)); + assert (isempty (A)) ***** test - % anti-diag - f = [y^2 x]; - g = [0 2*y; sym(1) 0]; - assert (isequal (jacobian(f), g)) - assert (isequal (jacobian(f, {x y}), g)) + % non-empty symbolic-size matrices + syms n integer + A = sym('A', [3 n]); + assert (~isempty (A)) +***** xtest + % empty symbolic-size matrices + % FIXME: will fail until size stop lying by saying 1x1 + syms n integer + A = sym('A', [0 n]); + assert (isempty (A)) + A = sym('A', [n 0]); + assert (isempty (A)) +!!!!! known failure +assert (isempty (A)) failed +10 tests, 9 passed, 1 known failure, 0 skipped +[inst/@sym/acosh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acosh.m +***** error acosh (sym(1), 2) +***** assert (isequaln (acosh (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - % shape - f = [x y^2]; - assert (isequal (size(jacobian(f, {x y z})), [2 3])) - assert (isequal (size(jacobian(f, [x y z])), [2 3])) - assert (isequal (size(jacobian(f, [x; y; z])), [2 3])) - assert (isequal (size(jacobian(f.', {x y z})), [2 3])) + f1 = acosh(x); + f2 = acosh(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % scalar f - f = x*y; - assert (isequal (size(jacobian(f, {x y})), [1 2])) - g = gradient(f, {x y}); - assert (isequal (jacobian(f, {x y}), g.')) + D = [d d; d d]; + A = [x x; x x]; + f1 = acosh(A); + f2 = acosh(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % vect f wrt 1 var - f = [x x^2]; - assert (isequal (size(jacobian(f, x)), [2 1])) - f = f.'; % same shape output - assert (isequal (size(jacobian(f, x)), [2 1])) -***** error jacobian([sym(1) 2; sym(3) 4]) -***** error jacobian(sym(1), 2, 3) -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@sym/ipermute.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ipermute.m -***** error permute (sym(1)) + % round trip + y = sym('y'); + A = acosh (d); + f = acosh (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/charpoly.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/charpoly.m +***** error charpoly (sym (1), 1, 2) +***** error charpoly (sym ([1 2])) ***** test syms x - A = [1 x]; - perm = [2 1]; - B = permute(A, perm); - C = ipermute(B, perm); - assert (isequal(C, A)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/norm.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/norm.m -***** assert (isequal (norm(sym(-6)), 6)) -***** test - % 2-norm default - A = [1 2; 3 4]; - n1 = norm (sym (A)); - assert (isequal (n1, sqrt (sqrt (sym(221)) + 15))) - assert (norm (A), double (n1), -eps) -***** test - syms x y real - assert (isequal (norm([x 1; 3 y], 'fro'), sqrt(x^2 + y^2 + 10))) + A = sym([1 2; 3 4]); + assert (isequal (charpoly(A, x), x^2 - 5*x -2)) ***** test - syms x real - assert (isequal (norm([x 1], 2), sqrt(x^2 + 1))) + syms x + A = sym([1 2; 3 4]); + B = sym([1 -5 -2]); + assert (isequal (charpoly(A), B)) ***** test - % test sym vs double ord syms x - assert (isequal (norm([x 2 1], 1), abs(x) + 3)) - assert (isequal (norm([x 2 1], sym(1)), abs(x) + 3)) - assert (isequal (norm([sym(-3) 2 1], inf), sym(3))) - assert (isequal (norm([sym(-3) 2 1], sym(inf)), sym(3))) + A = sym([x x; x x]); + B = sym([1 -2*x 0]); + assert (isequal (charpoly(A), B)) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/setdiff.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/setdiff.m +[inst/@sym/setxor.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/setxor.m ***** test A = sym([1 2 3]); B = sym([1 2 4]); - C = setdiff(A, B); - D = sym([3]); - assert (isequal (C, D)) + C = setxor(A, B); + D1 = sym([3 4]); + D2 = sym([4 3]); + assert (isequal (C, D1) || isequal (C, D2)) ***** test % one nonsym A = sym([1 2 3]); B = [1 2 4]; - C = setdiff(A, B); - D = sym([3]); - assert (isequal (C, D)) + C = setxor(A, B); + D1 = sym([3 4]); + D2 = sym([4 3]); + assert (isequal (C, D1) || isequal (C, D2)) ***** test % empty A = sym([1 2 3]); - C = setdiff(A, A); + C = setxor(A, A); assert (isempty (C)) ***** test % empty input A = sym([1 2]); - C = setdiff(A, []); + C = setxor(A, []); assert (isequal (C, A) || isequal (C, sym([2 1]))) ***** test % scalar syms x - assert (isequal (setdiff([x 1], x), sym(1))) - assert (isempty (setdiff(x, x))) + assert (isequal (setxor([x 1], x), sym(1))) + assert (isempty (setxor(x, x))) ***** test A = interval(sym(1), 3); B = interval(sym(2), 5); - C = setdiff(A, B); - assert( isequal( C, interval(sym(1), 2, false, true))) + C = setxor(A, B); + D = union (interval (sym(1), 2, false, true), interval (sym(3), 5, true, false)); + assert( isequal( C, D)) 6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/isnan.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isnan.m -***** shared x,zoo,oo,snan - oo = sym(inf); - zoo = sym('zoo'); - x = sym('x'); - snan = sym(nan); -***** test - % various ops that give nan - assert (isnan(0*oo)) - assert (isnan(0*zoo)) - assert (isnan(snan)) - assert (isnan(snan-snan)) - assert (isnan(oo+snan)) - assert (isnan(oo-oo)) - assert (isnan(oo-zoo)) - assert (isnan(oo+zoo)) - assert (~isnan(oo)) - assert (~isnan(zoo)) - assert (~isnan(oo+oo)) -***** test - % more ops give nan - assert(isnan(x+snan)) - assert(isnan(x*snan)) - assert(isnan(0*snan)) - assert(isnan(x+nan)) - assert(isnan(x*nan)) - assert(isnan(sym(0)*nan)) -***** test - % array - assert (isequal( isnan([oo zoo]), [0 0] )) - assert (isequal( isnan([10 snan]), [0 1] )) - assert (isequal( isnan([snan snan]), [1 1] )) - assert (isequal( isnan([snan x]), [1 0] )) +[inst/@sym/frac.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/frac.m ***** test - % sub in to algebraic expression gives nan - y = x - oo; - y = subs(y, x, oo); - assert(isnan(y)) + f1 = frac(sym(11)/10); + f2 = sym(1)/10; + assert (isequal (f1, f2)) ***** test - % Must not contain string 'symbol'; these all should make an - % actual nan. Actually a ctor test, not isnan. - y = sym(nan); - assert (isempty (strfind (sympy (y), 'Symbol'))) - y = sym('nan'); - assert (isempty (strfind (sympy (y), 'Symbol'))) - y = sym('NaN'); - assert (isempty( strfind (sympy (y), 'Symbol'))) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/coeffs.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/coeffs.m -***** error coeffs (sym(1), 2, 3, 4) -***** error coeffs (sym(1), 2, 'al') -***** error coeffs (sym(1), 'al') + d = sym(-11)/10; + c = sym(9)/10; + assert (isequal (frac (d), c)) ***** test - % simple - syms x - [c, t] = coeffs(6*x*x + 27); - assert (isequal (c, [6 27])) - assert (isequal (t, [x*x 1])) + d = sym(-19)/10; + c = sym(1)/10; + assert (isequal (frac (d), c)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/symsum.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/symsum.m +***** error symsum (sym(1), 2, 3, 4, 5) ***** test - % specify a variable - syms x - [c, t] = coeffs(6*x*x + 27, x); - assert (isequal (c, [6 27])) - assert (isequal (t, [x*x 1])) + % finite sums + syms n + assert (isequal (symsum(n,n,1,10), 55)) + assert(isa(symsum(n,n,1,10), 'sym')) + assert (isequal (symsum(n,n,sym(1),sym(10)), 55)) + assert (isequal (symsum(n,n,sym(1),sym(10)), 55)) + assert (isequal (symsum(1/n,n,1,10), sym(7381)/2520)) ***** test - % specify another variable - syms x y - [c, t] = coeffs(6*x + 27, y); - assert (isequal (c, 6*x + 27)) - assert (isequal (t, 1)) + % negative limits + syms n + assert (isequal (symsum(n,n,-3,3), sym(0))) + assert (isequal (symsum(n,n,-3,0), sym(-6))) + assert (isequal (symsum(n,n,-3,-1), sym(-6))) ***** test - % weird SMT order - syms x - a1 = [27 6]; - a2 = [6 27]; - c = coeffs(6*x*x + 27); - assert (isequal (c, a1)) - coeffs(6*x*x + 27); - assert (isequal (ans, a1)) - [c, t] = coeffs(6*x*x + 27); - assert (isequal (c, a2)) + % one input + syms n + f = symsum (n); + g = n^2/2 - n/2; + assert (isequal (f, g)) + f = symsum (2*n); + g = n^2 - n; + assert (isequal (f, g)) ***** test - % no weird order with "all" + % constant input + f = symsum (sym(2)); syms x - c = coeffs(6*x*x + 27, 'all'); - assert (isequal (c, [6 0 27])) + g = 2*x; + assert (isequal (f, g)) ***** test - % "all" - syms x - [c, t] = coeffs(6*x*x + 27, 'all'); - assert (isequal (c, [6 0 27])) - assert (isequal (t, [x^2 x 1])) + % two inputs + syms n + f = symsum (2*n, n); + g = n^2 - n; + assert (isequal (f, g)) ***** test - % "All" - syms x - [c, t] = coeffs(6*x, 'All'); - assert (isequal (c, [6 0])) - assert (isequal (t, [x 1])) + % two inputs, second is range + syms n + f = symsum (n, [1 6]); + g = 21; + assert (isequal (f, g)) + f = symsum (n, [sym(1) 6]); + g = 21; + assert (isequal (f, g)) + f = symsum (2*n, [1 6]); + g = 2*21; + assert (isequal (f, g)) ***** test - % multivariable array - syms x y - [c, t] = coeffs(6*x*x + 27*y*x + 36, [x y]); - a = [6 27 36]; - s = [x^2 x*y 1]; - assert (isequal (c, a)) - assert (isequal (t, s)) - % with list - [c, t] = coeffs(6*x*x + 27*y*x + 36, {x y}); - assert (isequal (c, a)) - assert (isequal (t, s)) + % three inputs, last is range + syms n + f = symsum (2*n, n, [1 4]); + g = sym(20); + assert (isequal (f, g)) + f = symsum (2*n, n, [sym(1) 4]); + g = sym(20); + assert (isequal (f, g)) + f = symsum (2, n, [sym(1) 4]); + g = sym(8); + assert (isequal (f, g)) ***** test - % other symbols treated as part of coeffs - syms x y - [c, t] = coeffs(6*x*x + 27*y*x + 36, x); - a = [6 27*y 36]; - s = [x^2 x 1]; - assert (isequal (c, a)) - assert (isequal (t, s)) -***** error - % TODO: multivariate all not working (https://github.com/cbm755/octsympy/issues/720) - syms x y - [c, t] = coeffs(6*x^2 + 7*y + 19, [x y], 'all'); + % three inputs, no range + syms n + f = symsum (2*n, 1, 4); + g = sym(20); + assert (isequal (f, g)) + f = symsum (5, sym(1), 3); + g = sym(15); + assert (isequal (f, g)) ***** test - % empty same as not specifying; maybe not SMT compatible: - % https://github.com/cbm755/octsympy/pull/708#discussion_r94292831 - syms x y - [c, t] = coeffs(6*x*x + 27*y*x + 36, {}); - a = [6 27 36]; - assert (isequal (c, a)) - [c, t] = coeffs(6*x*x + 27*y*x + 36); - assert (isequal (c, a)) + % ok to use double's for arguments in infinite series + syms n oo + assert(isequal(symsum(1/n^2,n,1,oo), sym(pi)^2/6)) + assert(isequal(symsum(1/n^2,n,1,inf), sym(pi)^2/6)) ***** test - % no input defaults to all symbols (not symvar to get x) - syms x y - [c, t] = coeffs(6*x*x + 27*y*x + 36); - assert (isequal (c, [6 27 36])) + % should be oo because 1 is real but seems to be + % zoo/oo depending on sympy version + syms n oo + zoo = sym('zoo'); + assert (isequal (symsum(1/n,n,1,oo), oo) || ... + isequal (symsum(1/n,n,1,oo), zoo)) +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/kroneckerDelta.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/kroneckerDelta.m +***** error kroneckerDelta (sym(1), 2, 3) ***** test - % non sym input syms x - assert (isequal (coeffs(6, x), sym(6))) + assert (isequal (kroneckerDelta (x, x), sym(1))) +***** assert (isequal (kroneckerDelta ([sym(1) 2 3], [1 2 0]), sym([1 1 0]))) ***** test - % constant input without x - assert (isequal (coeffs(sym(6)), sym(6))) + % round trip + if (python_cmd ('return Version(spver) > Version("1.2")')) + syms x y + f = kroneckerDelta (x, y); + h = function_handle (f); + assert (h (1, 2), 0) + assert (h (2, 2), 1) + end +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/isAlways.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isAlways.m ***** test - % constant input without x - assert (isequal (coeffs (sym(6), {}), sym(6))) - % irrational coefficients - syms x - f = x^2 + sqrt(sym(2))*x; - [c1, t1] = coeffs (f); - [c2, t2] = coeffs (f, x); - assert (isequal (c1, c2)) - assert (isequal (t1, t2)) -18 tests, 18 passed, 0 known failure, 0 skipped -[inst/@sym/solve.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/solve.m + % basics + assert(isAlways(true)) + assert(isAlways(1==1)) + assert(isAlways(sym(1)==sym(1))) + assert(isAlways(sym(1)==1)) ***** test - % Simple, single variable, single solution + % numbers to logic? + assert (isAlways(sym(1))) + assert (isAlways(sym(-1))) + assert (~isAlways(sym(0))) +***** shared x syms x - d = solve(10*x == 50); - assert (isequal (d, 5)) ***** test - % Single variable, multiple solutions - syms x - d = solve(x^2 == 4); - assert (length(d) == 2); - assert (isequal (d, [2; -2]) || isequal (d, [-2; 2])) -***** shared x,y,eq - syms x y - eq = 10*x == 20*y; + % in this case it is boolean + expr = x - x == 0; + assert (logical(expr)) + assert (isAlways(expr)) + % and both are logical type + assert (islogical(logical(expr))) + assert (islogical(isAlways(expr))) ***** test - d = solve(eq, x); - assert (isequal (d, 2*y)) + % structurally same and mathematically true + % (here expr should be sym, non-boolean) + expr = x == x; + assert (logical(expr)) + assert (isAlways(expr)) + %assert (~islogical(expr)) % FIXME: Issue #56 + %assert (isa(expr, 'sym)) ***** test - d = solve(eq, y); - assert (isequal (d, x/2)) + % structurally same and mathematically true + % (here expr should be sym, non-boolean) + expr = 1 + x == x + 1; + assert (logical(expr)) + assert (isAlways(expr)) ***** test - d = solve(eq); - assert (isequal (d, 2*y)) -***** shared x,y + % non-zero numbers are true + assert (isAlways(sym(1))) + assert (isAlways(sym(-10))) + assert (~isAlways(sym(0))) +***** shared x, y syms x y ***** test - d = solve(2*x - 3*y == 0, x + y == 1); - assert (isequal (d.x, sym(3)/5) && isequal(d.y, sym(2)/5)) -***** test - d = solve(2*x - 3*y == 0, x + y == 1, x, y); - assert (isequal (d.x, sym(3)/5) && isequal(d.y, sym(2)/5)) -***** test - % Multiple solutions, multiple variables - d = solve(x^2 == 4, x + y == 1); - assert (length(d) == 2); - % FIXME: SMT has d.x gives vector and d.y giving vector, what is - % more intuitive? - for i = 1:2 - assert (isequal (d{i}.x + d{i}.y, 1)) - assert (isequal ((d{i}.x)^2, 4)) - end + % structurally same and mathematically true + % (here expr should be sym, non-boolean) + expr = x*(1+y) == x*(y+1); + assert (logical(expr)) + assert (isAlways(expr)) + assert (islogical(isAlways(expr))) ***** test - % No solutions - syms x y z - d = solve(x == y, z); - assert (isempty (d)); + % Now for some differences + % simplest example from SymPy FAQ + expr = x*(1+y) == x+x*y; + assert (~logical(expr)) + assert (isAlways(expr)) ***** test - % Multiple outputs with single solution - [X, Y] = solve(2*x + y == 5, x + y == 3); - assert (isequal (X, 2)) - assert (isequal (Y, 1)) + % more differences 1, these don't simplify in sympy (as of 2016-01) + expr = (x+1)^2 == x*x + 2*x + 1; + assert (~logical(expr)) + assert (isAlways(expr)) ***** test - % system: vector of equations, vector of vars - [X, Y] = solve([2*x + y == 5, x + y == 3], [x y]); - assert (isequal (X, 2)) - assert (isequal (Y, 1)) + % more differences 2 + expr = sin(2*x) == 2*sin(x)*cos(x); + assert (~logical(expr)) + assert (isAlways(expr)) ***** test - % system: vector of equations, individual vars - [X, Y] = solve([2*x + y == 5, x + y == 3], x, y); - assert (isequal (X, 2)) - assert (isequal (Y, 1)) + % more differences 3, false + expr = x*(x+y) == x^2 + x*y + 1; + assert (~logical(expr)) + assert (~isAlways(expr)) + assert (~isAlways(expr, 'unknown', 'error')) ***** test - % system: individual equations, vector of vars - [X, Y] = solve(2*x + y == 5, x + y == 3, [x y]); - assert (isequal (X, 2)) - assert (isequal (Y, 1)) + % logically not equal, math equal + exprn = x*(x+y) ~= x^2 + x*y; + assert (logical(exprn)) + assert (~isAlways(exprn)) ***** test - % Multiple outputs with multiple solns - [X, Y] = solve(x*x == 4, x == 2*y); - assert ((isequal (X, [2; -2]) && isequal (Y, [1; -1])) || ... - (isequal (X, [-2; 2]) && isequal (Y, [-1; 1]))) + % logically not equal, math not equal + exprn = x*(x+y) ~= x^2 + x*y + 1; + assert (logical(exprn)) + assert (isAlways(exprn)) ***** test - % Multiple outputs with multiple solns, specify vars - [X, Y] = solve(x*x == 4, x == 2*y, x, y); - assert ((isequal (X, [2; -2]) && isequal (Y, [1; -1])) || ... - (isequal (X, [-2; 2]) && isequal (Y, [-1; 1]))) -***** error - % mult outputs not allowed for scalar equation, even with mult soln (?) - [s1, s2] = solve(x^2 == 4, x); + % equal and not equal + e1 = sin(x)^2 + cos(x)^2 == 1; + e2 = sin(x)^2 + cos(x)^2 == 2; + assert (~logical(e1)) + assert (isAlways(e1)) + assert (~logical(e2)) + assert (~isAlways(e2)) + assert (~isAlways(e2, 'unknown', 'error')) +***** error isAlways(x, 'unknown', 'kevin') +***** error isAlways(x, 'unknown') +***** error isAlways(x, 'kevin', 'true') +***** error + a = [x*(x+y)==x^2+x*y x==y]; + b = isAlways(a, 'unknown', 'error'); +***** error + a = x==y; + b = isAlways(a, 'unknown', 'error'); ***** test - % overdetermined - X = solve(2*x - 10 == 0, 3*x - 15 == 0, x); - assert (isequal (X, sym(5))) + % array, unknown keyword + a = [x==x x==x+1 x==y x*(x+y)==x^2+x*y cos(x)^2+sin(x)^2==2]; + b = isAlways(a, 'unknown', false); + c = isAlways(a, 'unknown', 'false'); + expect = [true false false true false]; + assert (islogical(b)) + assert (isequal (b, expect)) + assert (isequal (c, expect)) + b = isAlways(a, 'unknown', true); + c = isAlways(a, 'unknown', 'true'); + expect = [true false true true false]; + assert (islogical(b)) + assert (isequal (b, expect)) + assert (isequal (c, expect)) ***** test - a = solve(2*x >= 10, 10*x <= 50); - assert (isequal( a, x==sym(5))) + % ineq + e = x*(x+y) >= x^2 + x*y + 1; + assert (~logical(e)) + assert (isAlways(e)) + e = x*(x+y) <= x^2 + x*y; + assert (~logical(e)) + assert (isAlways(e)) +21 tests, 21 passed, 0 known failure, 0 skipped +[inst/@sym/conj.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/conj.m ***** test - A = solve([2*x == 4*y, 2 == 3], x); - assert (isequal (A, sym(false))) + a = sym(6); + b = sym(5i); + assert (isequal (conj(a), a)) + assert (isequal (conj(b), -b)) + assert (isequal (conj(a+b), a-b)) ***** test - % Issue #850 - if (python_cmd('return Version(spver) > Version("1.1.1")')) - A = solve (sym(pi)^2*x + y == 0); - assert (isequal (A, -y/sym(pi)^2)) - end + syms x + assert (isequal (conj(conj(x)), x)) ***** test - % https://github.com/sympy/sympy/issues/14632 - A = solve([2*x == 4*y, sym(2) == 2], x); - assert (isequal (A, 2*y)) + syms x real + assert (isequal (conj(x), x)) ***** test - % https://github.com/sympy/sympy/issues/14632 - A = solve([2*x^2 == 32*y^2, sym(2) == 2], x); - B = solve([2*x^2 == 32*y^2], x); - assert (isequal (A, B) || isequal (A, flip (B))) + % array + syms x + A = [x 6+1i; sym(1) x+2i]; + B = [conj(x) 6-1i; sym(1) conj(x)-2i]; + assert (isequal (conj(A), B)) ***** test - A = solve ([x+1 0], x); - assert (isequal (A, sym (-1))) + % true/false + t = sym(true); + f = sym(false); + assert (isequal ( conj(t), t)) + assert (isequal ( conj(f), f)) ***** test - A = solve (x + 1, x); - assert (isequal (A, sym (-1))) - A = solve (x, x); - assert (isequal (A, sym (0))) -24 tests, 24 passed, 0 known failure, 0 skipped + % round trip + syms x + d = 3 - 5i; + f = conj (x); + A = conj (d); + h = function_handle (f); + B = h (d); + assert (A, B) +6 tests, 6 passed, 0 known failure, 0 skipped [inst/@sym/eig.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/eig.m ***** test @@ -4196,131 +4089,62 @@ assert (sum(logical(V(3,:) ~= 0)) == 1) assert (sum(logical(V(4,:) ~= 0)) == 1) 6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/acoth.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acoth.m -***** error acoth (sym(1), 2) -***** assert (isequaln (acoth (sym(nan)), sym(nan))) +[inst/@sym/ellipticPi.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticPi.m +***** error ellipticPi (sym (1)) +***** error ellipticPi (sym (1), 2, 3, 4) +***** assert (double (ellipticPi (sym (-23)/10, sym (pi)/4, 0)), 0.5876852228, 10e-11) +***** assert (double (ellipticPi (sym (1)/3, sym (pi)/3, sym (1)/2)), 1.285032276, 10e-11) +***** assert (double (ellipticPi (sym (2), sym (pi)/6, sym (2))), 0.7507322117, 10e-11) +***** xtest + % FIXME: search/report upstream + assert (double (ellipticPi (sym (-1), 0, sym (1))), 0) +!!!!! known failure +ASSERT errors for: assert (double (ellipticPi (sym (-1), 0, sym (1))),0) + + Location | Observed | Expected | Reason + () NaN 0 'NaN' mismatch +***** test + % compare to Maple, complete + us = vpa (ellipticPi (sym(1)/6, sym(4)/3), 40); + % > evalf(EllipticPi(sin(1/6), sqrt(4/3)), 40); + maple = vpa ('2.019271696236161760696477679310987869058', 40) - ... + vpa ('1.708165765120289929280805062355360570830j', 40); + assert (abs (double (maple - us)), 0, 2e-39) +***** test + % compare to Maple, incomplete + us = vpa (ellipticPi (sym(8)/7, sym(4)/3, sym(2)/7), 40); + % > evalf(EllipticPi(sin(4/3), 8/7, sqrt(2/7)), 40); + maple = vpa ('2.089415796799294830305265090302275542033', 40) - ... + vpa ('4.798862045930802761256228043192491271947j', 40); + assert (abs (double (maple - us)), 0, 6e-39) +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/coth.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/coth.m +***** error coth (sym(1), 2) +***** assert (isequaln (coth (sym(nan)), sym(nan))) ***** shared x, d - d = 2; - x = sym('2'); + d = 1; + x = sym('1'); ***** test - f1 = acoth(x); - f2 = acoth(d); + f1 = coth(x); + f2 = coth(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = acoth(A); - f2 = acoth(D); + f1 = coth(A); + f2 = coth(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - A = acoth (d); - f = acoth (y); + A = coth (d); + f = coth (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/rows.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rows.m -***** test - a = sym([1 2 3]); - assert (rows(a) == 1) -***** test - a = sym([1 2 3; 4 5 6]); - assert (rows(a) == 2) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/ismatrix.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ismatrix.m -***** assert(ismatrix(sym('x'))) -***** assert(ismatrix(sym([1 2 3]))) -***** assert(ismatrix(sym([1; 2]))) -***** assert(ismatrix(sym([1 2; 3 4]))) -***** assert(ismatrix(sym([]))) -***** assert(ismatrix(sym(ones(1,0)))) -***** assert(ismatrix(sym(ones(0,3)))) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/svd.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/svd.m -***** test - % basic - A = [1 2; 3 4]; - B = sym(A); - sd = svd(A); - s = svd(B); - s2 = double(s); - assert (norm(s2 - sd) <= 10*eps) -***** test - % scalars - syms x - syms y positive - a = sym(-10); - assert (isequal (svd(a), sym(10))) - assert (isequal (svd(x), sqrt(x*conj(x)))) - assert (isequal (svd(y), y)) -***** test - % matrix with symbols - syms x positive - A = [x+1 0; sym(0) 2*x+1]; - s = svd(A); - s2 = subs(s, x, 2); - assert (isequal (s2, [sym(5); 3])) -***** test - % matrix with symbols - syms x positive - A = [x+1 0; sym(0) 2*x+1]; - s = svd(A); - s2 = subs(s, x, 2); - assert (isequal (s2, [sym(5); 3])) -***** test - % matrix with symbols, nonneg sing values - syms x real - A = [x 0; 0 sym(-5)]; - s = svd(A); - assert (isequal (s, [abs(x); 5])) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticCE.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCE.m -***** error ellipticCE (sym (1), 2) -***** assert (isequal (ellipticCE (sym (0)), sym (1))) -***** assert (isequal (ellipticCE (sym (1)), sym (pi)/2)) -***** assert (double (ellipticCE (sym (pi)/4)), 1.482786927, 10e-10) -***** assert (double (ellipticCE (sym (pi)/2)), 1.775344699, 10e-10) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/besselh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselh.m -***** test - % default to k=1 - syms z a - A = besselh(a, z); - B = besselh(a, 1, z); - assert (isequal (A, B)) -***** error besselh(sym('z')) -***** error besselh(2, 0, sym('z')) -***** error besselh(2, 3, sym('z')) -***** test - % doubles, relative error - X = [1 2 pi; 4i 5 6+6i]; - Xs = sym(X); - Alpha = [pi 3 1; 3 2 0]; - Alphas = sym(Alpha); - for k = 1:2 - A = double(besselh(Alphas, k, Xs)); - B = besselh(Alpha, k, X); - assert (all (all (abs(A - B) < 10*eps*abs(A)))) - end -***** test - % round-trip - syms x - for k = 1:2 - A = besselh(4, k, 10); - q = besselh(4, k, x); - h = function_handle(q); - B = h(10); - assert (abs(A - B) <= eps*abs(A)) - end -6 tests, 6 passed, 0 known failure, 0 skipped [inst/@sym/symvar.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/symvar.m ***** error symvar (sym(1), 2, 3) @@ -4370,82 +4194,804 @@ z = symvar (f, 1); assert (xor (isequal (z, x1), isequal (z, x2))) 10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@sym/asinh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/asinh.m -***** error asinh (sym(1), 2) -***** assert (isequaln (asinh (sym(nan)), sym(nan))) +[inst/@sym/bernoulli.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/bernoulli.m +***** error bernoulli (sym(1), 2, 3) +***** assert (isequal (bernoulli (sym(8)), -sym(1)/30)) +***** assert (isequal (bernoulli (sym(9)), sym(0))) +***** test syms x + assert (isequal (bernoulli(3,x), x^3 - 3*x^2/2 + x/2)) +***** test + m = sym([0 1; 8 888889]); + A = bernoulli (m); + B = [1 -sym(1)/2; -sym(1)/30 0]; + assert (isequal (A, B)) +***** test + syms x + A = bernoulli ([0; 1], x); + B = [sym(1); x - sym(1)/2]; + assert (isequal (A, B)) +***** test + % round trip + if (python_cmd('return Version(spver) > Version("1.2")')) + syms n x + f = bernoulli (n, x); + h = function_handle (f, 'vars', [n x]); + A = h (2, 2.2); + B = bernoulli (2, 2.2); + assert (A, B) + end +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/assumeAlso.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/assumeAlso.m +***** test + syms x + x = assumeAlso(x, 'positive'); + a = assumptions(x); + assert(strcmp(a, 'x: positive')) +***** error + syms x + x = assumeAlso (x, x); +***** test + syms x positive + x = assumeAlso(x, 'integer'); + [tilde, a] = assumptions(x, 'dict'); + assert(a{1}.integer) + assert(a{1}.positive) +***** test + % multiple assumptions + syms x positive + x = assumeAlso(x, 'integer', 'even'); + [tilde, a] = assumptions(x, 'dict'); + assert(a{1}.integer) + assert(a{1}.positive) + assert(a{1}.even) +***** test + % multiple assumptions + syms x integer + x = assumeAlso (x, 'even', 'positive'); + [tilde, a] = assumptions (x, 'dict'); + assert (a{1}.integer) + assert (a{1}.even) + assert (a{1}.positive) +***** test + % has output so avoids workspace + syms x positive + x2 = x; + f = sin(x); + assumeAlso(x, 'integer'); + a = assumptions(x); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) + a = assumptions(x2); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) + a = assumptions(f); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) +***** test + % has no output so does workspace + syms x positive + x2 = x; + f = sin(x); + assumeAlso(x, 'integer'); + a = assumptions(x); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) + a = assumptions(x2); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) + a = assumptions(f); + assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) +***** error + syms a + assumeAlso (a > 0) +***** test + syms x y + assumeAlso ([x y], 'even') + assert (strcmp (assumptions (x), 'x: even')) + assert (strcmp (assumptions (y), 'y: even')) +***** test + syms x y positive + f = sin (2*x); + assumeAlso ([x y], 'even') + assert (strcmp (assumptions (x), 'x: even, positive') || strcmp (assumptions (x), 'x: positive, even')) + assert (strcmp (assumptions (y), 'y: even, positive') || strcmp (assumptions (y), 'y: positive, even')) + assert (strcmp (assumptions (f), 'x: even, positive') || strcmp (assumptions (f), 'x: positive, even')) +***** test + % with output, original x and y are unchanged + syms x y positive + f = sin (2*x); + [p, q] = assumeAlso ([x y], 'even'); + assert (strcmp (assumptions (x), 'x: positive')) + assert (strcmp (assumptions (y), 'y: positive')) + assert (strcmp (assumptions (f), 'x: positive')) + assert (strcmp (assumptions (p), 'x: even, positive') || strcmp (assumptions (p), 'x: positive, even')) + assert (strcmp (assumptions (q), 'y: even, positive') || strcmp (assumptions (q), 'y: positive, even')) +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/matlabFunction.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/matlabFunction.m +***** test + % autodetect inputs + syms x y + s = warning('off', 'OctSymPy:function_handle:nocodegen'); + h = matlabFunction(2*x*y, x+y); + warning(s) + [t1, t2] = h(3,5); + assert(t1 == 30 && t2 == 8) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/findsym.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/findsym.m +***** assert (strcmp (findsym (sym(2)), '')); +***** shared x,y,f + x=sym('x'); y=sym('y'); f=x^2+3*x*y-y^2; +***** assert (strcmp (findsym (f), 'x,y')); +***** assert (strcmp (findsym (f,1), 'x')); +***** test + % test order of returned vars + syms x y a b c xx + % https://www.mathworks.com/matlabcentral/newsreader/view_thread/237730 + alpha = sym('alpha'); + assert (strcmp (findsym(b*xx*exp(alpha) + c*sin(a*y), 2), 'xx,y')) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/floor.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/floor.m +***** error floor (sym(1), 2) +***** assert (isequaln (floor (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = asinh(x); - f2 = asinh(d); + f1 = floor(x); + f2 = floor(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = asinh(A); - f2 = asinh(D); + f1 = floor(A); + f2 = floor(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - A = asinh (d); - f = asinh (y); + A = floor (d); + f = floor (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticCK.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCK.m -***** error ellipticCK (sym (1), 2) -***** assert (double (ellipticCK (sym (1)/2)), 1.8541, 10e-5) -***** assert (double (ellipticCK (sym (101)/10)), 0.812691836806976, -3*eps) -***** assert (isequal (ellipticCK (sym (1)), sym(pi)/2)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/atand.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/atand.m -***** error atand (sym(1), 2) -***** assert (isequaln (atand (sym(nan)), sym(nan))) +[inst/@sym/horzcat.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/horzcat.m ***** test - f1 = atand (sym(1)/2); - f2 = atand (1/2); - assert (double (f1), f2, -eps) + % basic + syms x + A = [x x]; + B = horzcat(x, x); + C = horzcat(x, x, x); + assert (isa (A, 'sym')) + assert (isa (B, 'sym')) + assert (isa (C, 'sym')) + assert (isequal (size(A), [1 2])) + assert (isequal (size(B), [1 2])) + assert (isequal (size(C), [1 3])) ***** test - D = [1 2; 3 4]/4; - A = sym([1 2; 3 4])/4; - f1 = atand (A); - f2 = atand (D); - assert (double (f1), f2, -eps) + % basic, part 2 + syms x + A = [x 1]; + B = [1 x]; + C = [1 2 x]; + assert (isa (A, 'sym')) + assert (isa (B, 'sym')) + assert (isa (C, 'sym')) + assert (isequal (size(A), [1 2])) + assert (isequal (size(B), [1 2])) + assert (isequal (size(C), [1 3])) +***** test + % row vectors + a = [sym(1) 2]; + b = [sym(3) 4]; + assert (isequal ( [a b] , [1 2 3 4] )) + assert (isequal ( [a 3 4] , [1 2 3 4] )) + assert (isequal ( [3 4 a] , [3 4 1 2] )) + assert (isequal ( [a [3 4]] , [1 2 3 4] )) + assert (isequal ( [a sym(3) 4] , [1 2 3 4] )) + assert (isequal ( [a [sym(3) 4]] , [1 2 3 4] )) +***** test + % col vectors + a = [sym(1); 2]; + b = [sym(3); 4]; + assert (isequal ( [a b] , [1 3; 2 4] )) + assert (isequal ( [a b a] , [1 3 1; 2 4 2] )) +***** test + % empty vectors + v = sym(1); + a = [v []]; + assert (isequal (a, v)) + a = [[] v []]; + assert (isequal (a, v)) + a = [v [] []]; + assert (isequal (a, v)) +***** test + % more empty vectors + v = [sym(1) sym(2)]; + q = sym(ones(1, 0)); + assert (isequal ([v q], v)) +***** error + v = [sym(1) sym(2)]; + q = sym(ones(3, 0)); + w = horzcat(v, q); +***** test + % issue #700 + A = sym ([1 2]); + B = simplify (A); + assert (isequal ([B A], [A B])) +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticCPi.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCPi.m +***** error ellipticCPi (sym (1)) +***** error ellipticCPi (sym (1), 2, 3) +***** assert (double (ellipticCPi (0, sym (1)/2)), 1.854074677, 10e-10) +***** assert (double (ellipticCPi (sym (6)/10, sym(71)/10)), 1.29469534336658, -20*eps) 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/all.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/all.m +[inst/@sym/permute.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/permute.m +***** error permute (sym(1)) ***** test - % matrix - a = [0 3; 1 2]; - s = sym (a); - assert (isequal (all (s), all (a))) - assert (isequal (all (s,1), all (a,1))) - assert (isequal (all (s,2), all (a,2))) + D = round(10*rand(5,3)); + A = sym(D); + B = permute(A, [1 2]); + assert (isequal(B, A)) + B = permute(A, [2 1]); + assert (isequal(B, A.')) ***** test - % vector - a = [1 2 3]; - s = sym (a); - assert (isequal (all (s), all (a))) - assert (isequal (all (s,1), all (a,1))) - assert (isequal (all (s,2), all (a,2))) + syms x + A = [1 x]; + B = permute(A, [2 1]); + assert (isequal(B, [1; x])) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/det.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/det.m +***** assert (isequal (det(sym([])), 1)) +***** test + syms x y real + assert (isequal (det([x 5; 7 y]), x*y-35)) ***** test - % should fail on symbols syms x - s = [1 2 x]; - try - all (s) - waserr = false; - catch - waserr = true; + assert (isequal (det(x), x)) + assert (isequal (det(sym(-6)), sym(-6))) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/colon.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/colon.m +***** test + a = sym(1):5; + b = sym(1:5); + assert(isequal(a,b)); + a = 1:sym(5); + b = sym(1:5); + assert(isequal(a,b)); +***** test + a = 2:sym(2):8; + b = sym(2:2:8); + assert(isequal(a,b)); +***** test + a = sym(10):-2:-4; + b = sym(10:-2:-4); + assert(isequal(a,b)); +***** test + % symbolic intervals + p = sym(pi); + L = 0:p/4:p; + assert(isa(L,'sym')); + assert(isequal(L, [0 p/4 p/2 3*p/4 p])); +***** test + % mixed symbolic and double intervals + p = sym(pi); + s = warning ('off', 'OctSymPy:sym:rationalapprox'); + L = 0.1:(sym(pi)/3):2.3; + warning(s) + assert(isa(L,'sym')); + t = sym(1)/10; + assert(isequal(L, [t p/3+t 2*p/3+t])); +***** error syms x; a = 0:x; +***** error syms x; a = 1:x; +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/mldivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/mldivide.m +***** test + % scalar + syms x + assert (isa( x\x, 'sym')) + assert (isequal( x\x, sym(1))) + assert (isa( 2\x, 'sym')) + assert (isa( x\2, 'sym')) +***** test + % scalar \ matrix: easy, no system + D = 2*[0 1; 2 3]; + A = sym(D); + assert (isequal ( 2 \ A , D/2 )) + assert (isequal ( sym(2) \ A , D/2 )) +***** test + % singular matrix + A = sym([1 2; 2 4]); + b = sym([5; 10]); + x = A \ b; + syms c1 + y = [-2*c1 + 5; c1]; + assert (isequal (x, y)) +***** test + % singular matrix, mult RHS + A = sym([1 2; 2 4]); + B = sym([[5; 10] [0; 2] [0; 0]]); + x = A \ B; + syms c1 c5 + y = [-2*c1 + 5 nan -2*c5; c1 nan c5]; + assert (isequaln (x, y)) +***** warning + % vpa, nearly singular matrix + A = sym([1 2; 2 4]); + A(1,1) = vpa('1.001'); + b = sym([1; 2]); + x = A \ b; + y = [sym(0); vpa('0.5')]; + assert (isequal (x, y)) +***** warning + % vpa, singular rhs + A = sym([1 2; 2 4]); + b = [vpa('1.01'); vpa('2')]; + x = A \ b; + assert (all(isnan(x))) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/eye.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/eye.m +***** test + y = eye(sym(2)); + x = [1 0; 0 1]; + assert( isequal( y, sym(x))) +***** test + y = eye(sym(2), 1); + x = [1; 0]; + assert( isequal( y, sym(x))) +***** test + y = eye(sym(1), 2); + x = [1 0]; + assert( isequal( y, sym(x))) +***** assert( isa( eye(sym(2), 'double'), 'double')) +***** assert( isa( eye(3, sym(3), 'single') , 'single')) +***** assert( isa( eye(3, sym(3)), 'sym')) +***** assert( isa( eye(3, sym(3), 'sym'), 'sym')) +***** xtest + % Issue #13 + assert( isa( eye(3, 3, 'sym'), 'sym')) +!!!!! known failure +invalid data type specified +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/numden.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/numden.m +***** test + [n, d] = numden(sym(2)); + assert (isequal (n, 2)); + assert (isequal (d, 1)); +***** test + syms x y + [n, d] = numden((x + pi)/(y + 6)); + assert (isequal (n, x + pi)); + assert (isequal (d, y + 6)); +***** test + syms x y + [n, d] = numden((x^2 + y^2)/(x*y)); + assert (isequal (n, x^2 + y^2)); + assert (isequal (d, x*y)); +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/isfinite.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isfinite.m +***** assert (isfinite(sym(1))) +***** assert (isfinite(sym(-10))) +***** assert (~isfinite(sym('oo'))) +***** assert (~isfinite(sym('-oo'))) +***** assert (~isfinite(sym(1)/0)) +***** assert (~isfinite(sym(nan))) +***** assert (isequal (isfinite (sym ([1 inf])), [true false])) +***** test + % finite-by-assumption + syms x finite + assert (isfinite (x)) +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/formula.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/formula.m +***** test + syms x + assert (isequal (formula(x), x)) + assert (isequal (formula(2*x), 2*x)) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/isNone.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isNone.m +***** test + None = python_cmd ('return None'); +***** shared None + None = python_cmd ('return None'); +***** assert (isNone(None)) +***** assert (~isNone(sym('x'))) +***** assert (islogical(isNone(None))) +***** test + a = [1 None]; + a = [None None]; + a = [None; 1]; + a = [None; None]; + a = [None 2; 3 None]; +***** test + a = sym([1 2]); + a(1,2) = None; + assert (isequal (a, [sym(1) None])); +***** assert (isequal (None(1), None)); +***** error None(None); +***** error x=sym('x'); x(None); +***** error x=1; x(None); +***** error None(None); +***** error 1 + None; +***** error None - 1; +***** error 6*None; +***** error 2**None; +***** error [1 2].*None; +***** error isconstant(None); +***** error nnz(None); +***** error logical(None); +***** error isAlways(None); +***** error logical([sym(true) None]); +***** error isAlways([sym(true) None]); +***** assert (isequal (children(None), None)) +***** assert (isequal (repmat(None, 1, 2), [None None])) +***** assert (isequal (fliplr(None), None)) +***** assert (isequal (flipud(None), None)) +26 tests, 26 passed, 0 known failure, 0 skipped +[inst/@sym/flipud.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/flipud.m +***** test + % simple + syms x + A = [x 2; sym(pi) x]; + B = [sym(pi) x; x 2]; + assert (isequal (flipud(A), B)) +***** test + % simple, odd # rows + syms x + A = [x 2; sym(pi) x; [1 2]]; + B = [[1 2]; sym(pi) x; x 2]; + assert (isequal (flipud(A), B)) +***** test + % scalar + syms x + assert (isequal (flipud(x), x)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/pochhammer.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/pochhammer.m +***** error pochhammer (sym(1)) +***** error pochhammer (sym(1), 2, 3) +***** assert (isequal (pochhammer (sym(3), 4), sym(360))) +***** assert (isequal (pochhammer (sym([2 3]), 3), sym([24 60]))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.2")')) + syms n z + f = pochhammer (z, n); + h = function_handle (f, 'vars', [z n]); + A = h (1.1, 2.2); + B = pochhammer (1.1, 2.2); + assert (A, B) end - assert (waserr) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/rhs.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rhs.m +***** test + syms x + f = x + 1 == 2*x; + assert (isequal (rhs(f), 2*x)) +***** error + syms x + rhs(x) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/cat.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cat.m +***** test + % mostly tested in horzcat, vertcat: one for good measure + syms x + assert (isequal (cat(1, x, x), [x x])) + assert (isequal (cat(2, x, x), [x; x])) +***** error cat(3, sym(2), sym(3)) +***** error cat(0, sym(2), sym(3)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/round.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/round.m +***** test + d = 3/2; + x = sym('3/2'); + f1 = round(x); + f2 = round(d); + assert (isequal (f1, f2)) +***** test + d = 5/2; + x = sym('5/2'); + f1 = round(x); + f2 = round(d); + assert (isequal (f1, f2)) +***** test + D = [1.1 4.6; -3.4 -8.9]; + A = [sym(11)/10 sym(46)/10; sym(-34)/10 sym(-89)/10]; + f1 = round(A); + f2 = round(D); + assert( isequal (f1, f2)) +***** test + d = sym(-11)/10; + c = -1; + assert (isequal (round (d), c)) +***** test + d = sym(-19)/10; + c = -2; + assert (isequal (round (d), c)) +***** test + d = 5j/2; + x = sym(5j)/2; + f1 = round (x); + f2 = round (d); + assert (isequal (f1, f2)) +***** test + d = 5/3 - 4j/7; + x = sym(5)/3 - sym(4j)/7; + f1 = round (x); + f2 = round (d); + assert (isequal (f1, f2)) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/laplace.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/laplace.m +***** test + % basic + syms t s u w + assert(logical( laplace(cos(3*t)) == s/(s^2+9) )) + assert(logical( laplace(t^3) == 6/s^4 )) +***** test + % matlab SMT compat + syms t s u w z + assert(logical( laplace(exp(2*t)) == 1/(s-2) )) + assert(logical( laplace(exp(2*s)) == 1/(z-2) )) + assert(logical( laplace(exp(2*u),w) == 1/(w-2) )) + assert(logical( laplace(exp(2*u),u,w) == 1/(w-2) )) +***** test + syms x s t z + % matlab SMT prefers t over x (WTF not symvar like we do?) + assert (isequal (laplace(x*exp(t), z), exp(t)/z^2)) + % as usual, you can just specify: + assert (isequal (laplace(x*exp(t), t, z), x/(z - 1))) % SMT result + assert (isequal (laplace(x*exp(t), x, z), exp(t)/z^2)) +***** test + % constant, issue #250 + syms s + f = laplace(2, s); + assert (isequal (f, 2/s)) +***** test + % Dirac delta and Heaviside tests + syms t s + assert (isequal (laplace(dirac(t-3)), exp(-3*s))) + assert (isequal (laplace((t-3)*heaviside(t-3)), exp(-3*s)/s^2)) +***** xtest + % Differential operator to algebraic + % SymPy cannot evaluate? (Issue #170) + syms s f(t) + assert(logical( laplace(diff(f(t),t),t,s) == s*laplace(f(t),t,s)-f(0) )) +!!!!! known failure +assert (logical (laplace (diff (f (t), t), t, s) == s * laplace (f (t), t, s) - f (0))) failed +6 tests, 5 passed, 1 known failure, 0 skipped +[inst/@sym/ei.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ei.m +***** test + syms x + f = ei(sym(0)); + assert (double(f) == -inf) +***** test + D = [1.895117816355937 4.954234356001890]; + A = ei(sym([1 2])); + assert (all (abs(double(A) - D) < 1e-15)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/erfc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfc.m +***** error erfc (sym(1), 2) +***** assert (isequaln (erfc (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = erfc(x); + f2 = erfc(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = erfc(A); + f2 = erfc(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = erfc (d); + f = erfc (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/besselh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselh.m +***** test + % default to k=1 + syms z a + A = besselh(a, z); + B = besselh(a, 1, z); + assert (isequal (A, B)) +***** error besselh(sym('z')) +***** error besselh(2, 0, sym('z')) +***** error besselh(2, 3, sym('z')) +***** test + % doubles, relative error + X = [1 2 pi; 4i 5 6+6i]; + Xs = sym(X); + Alpha = [pi 3 1; 3 2 0]; + Alphas = sym(Alpha); + for k = 1:2 + A = double(besselh(Alphas, k, Xs)); + B = besselh(Alpha, k, X); + assert (all (all (abs(A - B) < 10*eps*abs(A)))) + end +***** test + % round-trip + syms x + for k = 1:2 + A = besselh(4, k, 10); + q = besselh(4, k, x); + h = function_handle(q); + B = h(10); + assert (abs(A - B) <= eps*abs(A)) + end +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/hypergeom.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/hypergeom.m +***** assert (isequal (double (hypergeom ([1, 2], [2, 3], sym(0))), 1)) +***** test + % matrix input + syms z + a = sym([1 2]); + b = sym([3 4]); + A = hypergeom (a, b, [0 sym(1); 2 z]); + B = [hypergeom(a,b,0) hypergeom(a,b,1); hypergeom(a,b,2) hypergeom(a,b,z)]; + assert (isequal (A, B)) +***** test + % scalars for a and/or b + syms z + assert (isequal (hypergeom(1, 2, z), hypergeom({sym(1)}, {sym(2)}, z))) + assert (isequal (hypergeom([1 2], 3, z), hypergeom([1 2], {sym(3)}, z))) + assert (isequal (hypergeom(1, [2 3], z), hypergeom({sym(1)}, [2 3], z))) 3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/lt.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/lt.m +***** test + % simple + x = sym(1); y = sym(1); e = x < y; + assert (~logical (e)) + x = sym(1); y = sym(2); e = x < y; + assert (logical (e)) +***** test + % mix sym and double + x = sym(1); y = 1; e = x < y; + assert (~logical (e)) + x = sym(1); y = 2; e = x < y; + assert (logical (e)) + x = 1; y = sym(1); e = x < y; + assert (~logical (e)) + x = 1; y = sym(2); e = x < y; + assert (logical (e)) +***** test + % Type of the output is sym or logical? + % FIXME: in current version, they are sym + x = sym(1); y = sym(1); e1 = x < y; + x = sym(1); y = sym(2); e2 = x < y; + %assert (islogical (e1)) + %assert (islogical (e2)) + assert (isa (e1, 'sym')) + assert (isa (e2, 'sym')) +***** test + % ineq w/ symbols + syms x y + e = x < y; + assert (~islogical (e)) + assert (isa (e, 'sym')) +***** test + % array -- array + syms x + a = sym([1 3 3 2*x]); + b = sym([2 x 3 10]); + e = a < b; + assert (isa (e, 'sym')) + assert (logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 3 < x)) + assert (~logical (e(3))) + assert (isa (e(4), 'sym')) + assert (isequal (e(4), 2*x < 10)) +***** test + % array -- scalar + syms x oo + a = sym([1 x oo]); + b = sym(3); + e = a < b; + assert (isa (e, 'sym')) + assert (logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), x < 3)) + assert (~logical (e(3))) +***** test + % scalar -- array + syms x oo + a = sym(1); + b = sym([2 x -oo]); + e = a < b; + assert (isa (e, 'sym')) + assert (logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 1 < x)) + assert (~logical (e(3))) +***** test + % ineq w/ nan + syms x + snan = sym(nan); + e = x < snan; + assert (~logical (e)) + e = snan < x; + assert (~logical (e)) + b = [sym(0) x]; + e = b < snan; + assert (isequal (e, [false false])) +***** test + % oo + syms oo x + e = oo < x; + assert (isa (e, 'sym')) + assert (strcmp (strtrim (disp (e, 'flat')), 'oo < x')) +***** test + % sympy true matrix + a = sym([1 3 3]); + b = sym([2 4 1]); + e = a < b; + %assert (~isa (e, 'sym')) + %assert (islogical (e)) + assert (isequal (e, [true true false])) +***** test + % oo, finite real variables + syms oo + syms z real + assumeAlso(z, 'finite') + e = -oo < z; + assert (isequal (e, sym(true))) + e = z < oo; + assert (isequal (e, sym(true))) +***** test + % -oo, positive var (known failure w/ sympy 0.7.6.x) + syms oo + syms z positive + e = -oo < z; + assert (logical (e)) + assert (isequal (e, sym(true))) +***** test + % positive + syms z positive + e = -1 < z; + assert (isequal (e, sym(true))) +***** test + syms oo + z = sym('z', 'negative'); + e = z < oo; + assert (isequal (e, sym(true))) +14 tests, 14 passed, 0 known failure, 0 skipped +[inst/@sym/sympy.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sympy.m +***** assert (strcmp (sympy (sym(pi)), 'pi')) +***** assert (strcmp (sympy (sym(1)), 'Integer(1)')) +***** assert (strcmp (sympy (sym(2)/3), 'Rational(2, 3)')) +***** assert (strcmp (sympy (sym('x')), 'Symbol(''x'')')) +***** test + x = sym('x'); + assert (isequal (sym(sympy(x)), x)) +5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/children.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/children.m ***** test @@ -4504,120 +5050,1307 @@ A = sym('a', [n m]); assert (isequal (children(A), [sym('a') n m])) 9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/angle.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/angle.m -***** test - Z = [sqrt(sym(3)) + 3*sym(i), 3 + sqrt(sym(3))*sym(i); 1 + sym(i), sym(i)]; - Q = [sym(pi)/3 sym(pi)/6; sym(pi)/4 sym(pi)/2]; - assert( isequal( angle(Z), Q)); -***** test - % roundtrip - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms x - A = angle (2+2i); - f = angle (x); - h = function_handle (f); - B = h (2+2i); - assert (A, B, -eps) - end -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/divisors.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/divisors.m +[inst/@sym/max.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/max.m ***** test - assert( isequal( divisors(sym(150)), divisors(sym(-150)) )) + % simple + assert (isequal (max([sym(10) sym(11)]), sym(11))) 1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/gamma.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/gamma.m -***** error gamma (sym(1), 2) -***** assert (isequaln (gamma (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = gamma(x); - f2 = gamma(d); - assert( abs(double(f1) - f2) < 1e-15 ) +[inst/@sym/isnan.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isnan.m +***** shared x,zoo,oo,snan + oo = sym(inf); + zoo = sym('zoo'); + x = sym('x'); + snan = sym(nan); ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = gamma(A); - f2 = gamma(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % various ops that give nan + assert (isnan(0*oo)) + assert (isnan(0*zoo)) + assert (isnan(snan)) + assert (isnan(snan-snan)) + assert (isnan(oo+snan)) + assert (isnan(oo-oo)) + assert (isnan(oo-zoo)) + assert (isnan(oo+zoo)) + assert (~isnan(oo)) + assert (~isnan(zoo)) + assert (~isnan(oo+oo)) ***** test - % round trip - y = sym('y'); - A = gamma (d); - f = gamma (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/abs.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/abs.m -***** error abs (sym(1), 2) -***** assert (isequaln (abs (sym(nan)), sym(nan))) -***** shared x, d - d = -1; - x = sym('-1'); + % more ops give nan + assert(isnan(x+snan)) + assert(isnan(x*snan)) + assert(isnan(0*snan)) + assert(isnan(x+nan)) + assert(isnan(x*nan)) + assert(isnan(sym(0)*nan)) ***** test - f1 = abs(x); - f2 = abs(d); - assert( abs(double(f1) - f2) < 1e-15 ) + % array + assert (isequal( isnan([oo zoo]), [0 0] )) + assert (isequal( isnan([10 snan]), [0 1] )) + assert (isequal( isnan([snan snan]), [1 1] )) + assert (isequal( isnan([snan x]), [1 0] )) ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = abs(A); - f2 = abs(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % sub in to algebraic expression gives nan + y = x - oo; + y = subs(y, x, oo); + assert(isnan(y)) ***** test - % round trip - y = sym('y'); - A = abs (d); - f = abs (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) + % Must not contain string 'symbol'; these all should make an + % actual nan. Actually a ctor test, not isnan. + y = sym(nan); + assert (isempty (strfind (sympy (y), 'Symbol'))) + y = sym('nan'); + assert (isempty (strfind (sympy (y), 'Symbol'))) + y = sym('NaN'); + assert (isempty( strfind (sympy (y), 'Symbol'))) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/subsasgn.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/subsasgn.m -***** shared a,b - b = [1:4]; - a = sym(b); -***** test a(1) = 10; b(1) = 10; - assert(isequal( a, b )) -***** test I = logical([1 0 1 0]); - a(I) = 2; b(I) = 2; - assert(isequal( a, b )) -***** test I = logical([1 0 1 0]); - a(I) = [2 4]; b(I) = [2 4]; - assert(isequal( a, b )) -***** test I = logical([1 0 1 0]); - a(I) = [2; 4]; b(I) = [2; 4]; - assert(isequal( a, b )) -***** shared +[inst/@sym/symreplace.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/symreplace.m ***** test - b = 1:4; b = [b; 2*b; 3*b]; - a = sym(b); - rhs = [10 11; 12 13]; - a([1:2],[1:2]) = rhs; - b([1:2],[1:2]) = rhs; - assert(isequal( a, b )) - a(1:2,1:2) = rhs; - assert(isequal( a, b )) + % start with assumptions on x then remove them + syms x positive + f = x*10; + symreplace(x, sym('x')) + assert(isempty(assumptions(x))) ***** test - % slice : - b = 1:4; b = [b; 2*b]; - a = sym(b); - rhs = [10 11; 12 13]; - a(:,2:3) = rhs; - b(:,2:3) = rhs; - assert(isequal( a, b )) + % replace x with y + syms x + f = x*10; + symreplace(x, sym('y')) + assert( isequal (f, 10*sym('y'))) ***** test - % grow 2D - b = 1:4; b = [b; 2*b]; - a = sym(b); - rhs = [10 11; 12 13]; - a([1 end+1],end:end+1) = rhs; + % gets inside cells + syms x + f = {x 1 2 {3 4*x}}; + symreplace(x, sym('y')) + syms y + assert( isequal (f{1}, y)) + assert( isequal (f{4}{2}, 4*y)) +***** test + % gets inside structs/cells + syms x + my.foo = {x 1 2 {3 4*x}}; + my.bar = x; + g = {'ride' my 'motor' 'sicle'}; + symreplace(x, sym('y')) + syms y + f = g{2}; + assert( isequal (f.foo{1}, y)) + assert( isequal (f.foo{4}{2}, 4*y)) + assert( isequal (f.bar, y)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/char.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/char.m +***** test + % issue #91: expose as string + a = sym(pi); + assert (strcmp (char (a), 'pi')) +***** shared x + x = sym('x'); +***** assert (strcmp (char (x), 'x')) +***** assert (strcmp (char (2*x), '2*x')) +***** assert (strcmp (char ([2*x x]), 'Matrix([[2*x, x]])')) +***** assert (strcmp (char ([2*x 2; 1 x]), 'Matrix([[2*x, 2], [1, x]])')) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/and.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/and.m +***** shared t, f + t = sym(true); + f = sym(false); +***** test + % simple + assert (isequal (t & f, f)) + assert (isequal (t & t, t)) +***** test + % mix wih nonsym + assert (isequal (t & false, f)) + assert (isequal (t & true, t)) + assert (isequal (t & 0, f)) + assert (isequal (t & 1, t)) + assert (isa (t & false, 'sym')) + assert (isa (t & 1, 'sym')) +***** test + % array + w = [t t f f]; + z = [t f t f]; + assert (isequal (w & z, [t f f f])) +***** test + % number + assert (isequal( sym(1) & t, t)) + assert (isequal( sym(0) & t, f)) +***** test + % output is sym even for scalar t/f + assert (isa (t & f, 'sym')) +***** test + % eqns, exclusive + syms x + e = (x == 3) & (x^2 == 9); + assert (isequal (subs(e, x, [-3 0 3]), [f f t])) +***** error and (sym('x'), 2, 3) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/iscolumn.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/iscolumn.m +***** assert (iscolumn (sym ([1]))) +***** assert (iscolumn (sym ([1 2 3]'))) +***** assert (~iscolumn (sym ([]))) +***** assert (~iscolumn (sym ([1 2 3]))) +***** assert (~iscolumn (sym ([1 2; 3 4]))) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/divergence.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/divergence.m +***** shared x,y,z + syms x y z +***** test + % 1D + f = x^2; + assert (isequal (divergence(f), diff(f,x))) + assert (isequal (divergence(f,{x}), diff(f,x))) + assert (isequal (divergence(f,[x]), diff(f,x))) + assert (isequal (divergence(f,x), diff(f,x))) +***** test + % const + f = [sym(1); 2; exp(sym(3))]; + assert (isequal (divergence(f,{x,y,z}), 0)) + f = [sym(1); 2; exp(sym('c'))]; + assert (isequal (divergence(f,{x,y,z}), 0)) +***** test + % double const + f = [1 2]; + g = sym(0); + assert (isequal (divergence(f, [x y]), g)) + % should fail, calls @double: divergence(f, {x y}), g)) +***** test + % 1D fcn in 2d/3d + f = [x y z]; + assert (isequal (divergence(f), 3)) + assert (isequal (divergence(f, {x,y,z}), 3)) + assert (isequal (divergence(f, [x,y,z]), 3)) +***** test + % 2d fcn in 2d/3d + f = sin(exp(x)*y+sinh(z)); + g2 = [diff(f,x); diff(f,y)]; + l2 = diff(g2(1),x) + diff(g2(2),y); + g3 = [diff(f,x); diff(f,y); diff(f,z)]; + l3 = diff(g3(1),x) + diff(g3(2),y) + diff(g3(3),z); + assert (isequal (divergence(g2, {x,y}), l2)) + assert (isequal (divergence(g3, {x,y,z}), l3)) +***** error divergence ([1 2], [sym('x')]) +***** error divergence ([1 2], sym('x'), 42) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/isinf.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isinf.m +***** shared x,zoo,oo,snan + oo = sym(inf); + zoo = sym('zoo'); + x = sym('x'); + snan = sym(nan); +***** test + % various ops that give inf and nan + assert (isinf(oo)) + assert (isinf(zoo)) + assert (isinf(oo+oo)) + assert (~isinf(oo+zoo)) + assert (~isinf(0*oo)) + assert (~isinf(0*zoo)) + assert (~isinf(snan)) + assert (~isinf(oo-oo)) + assert (~isinf(oo-zoo)) +***** test + % arrays + assert (isequal( isinf([oo zoo]), [1 1] )) + assert (isequal( isinf([oo 1]), [1 0] )) + assert (isequal( isinf([10 zoo]), [0 1] )) + assert (isequal( isinf([x oo x]), [0 1 0] )) +***** test + % Must not contain string 'symbol'; these all should make an + % actual infinity. Actually a ctor test, not isinf. + % IIRC, SMT in Matlab 2013b fails. + oo = sym(inf); + assert (isempty (strfind (sympy (oo), 'Symbol'))) + oo = sym(-inf); + assert (isempty (strfind (sympy (oo), 'Symbol'))) + oo = sym('inf'); + assert (isempty (strfind (sympy (oo), 'Symbol'))) + oo = sym('-inf'); + assert (isempty (strfind (sympy (oo), 'Symbol'))) + oo = sym('Inf'); + assert (isempty (strfind (sympy (oo), 'Symbol'))) +***** test + % ops with infinity shouldn't collapse + syms x oo zoo + y = x + oo; + assert (~isempty (strfind (lower (sympy (y)), 'add') )) + y = x - oo; + assert (~isempty (strfind (lower (sympy (y)), 'add') )) + y = x - zoo; + assert (~isempty (strfind (lower (sympy (y)), 'add') )) + y = x*oo; + assert (~isempty (strfind (lower (sympy (y)), 'mul') )) +***** test + % ops with infinity are not necessarily infinite + syms x oo zoo + y = x + oo; + assert(~isinf(y)) % SMT 2014a says "true", I disagree + y = x - zoo; + assert(~isinf(y)) + y = x*oo; + assert(~isinf(y)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/sign.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sign.m +***** error sign (sym(1), 2) +***** assert (isequaln (sign (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = sign(x); + f2 = sign(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = sign(A); + f2 = sign(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = sign (d); + f = sign (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ellipke.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipke.m +***** error ellipke (sym(1), 2) +***** test + for i = 2:10 + [K E] = ellipke (sym (1)/i); + [k e] = ellipke (1/i); + assert (double ([K E]), [k e], 2*eps) + end +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/acosd.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acosd.m +***** error acosd (sym(1), 2) +***** assert (isequaln (acosd (sym(nan)), sym(nan))) +***** test + f1 = acosd (sym(1)/2); + f2 = acosd (1/2); + assert (double (f1), f2, -eps) +***** test + D = [1 2; 3 4]/4; + A = sym([1 2; 3 4])/4; + f1 = acosd (A); + f2 = acosd (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/expand.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/expand.m +***** test + syms x + assert (logical (x^2 + 6*x + 5 == expand ((x+5)*(x+1)))) + assert (isequal (x^2 + 6*x + 5, expand ((x+5)*(x+1)))) +***** test + % array + syms x + assert (isequal (expand ([x (x+1)*x]), [x x^2+x])) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/logical.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/logical.m +***** test + % basics, many others in isAlways.m + assert (logical(true)) + assert (~(logical(false))) +***** test + % numbers to logic? + assert (logical(sym(1))) + assert (logical(sym(-1))) + assert (~logical(sym(0))) +***** test + % eqns, "structurally equivalent" + syms x + e = logical(x == x); + assert ( islogical (e)) + assert (e) + e = logical(x == 1); + assert ( islogical (e)) + assert (~e) +***** test + % eqn could have solutions but are false in general + syms x + e = logical(x^2 == x); + assert ( islogical (e)) + assert (~e) + e = logical(2*x == x); + assert ( islogical (e)) + assert (~e) +***** test + % FIXME: (not sure yet) T/F matrices should stay sym until logical() + a = sym(1); + e = a == a; + assert (isa (e, 'sym')) + assert (islogical (logical (e))) + e = [a == a a == 0 a == a]; + assert (isa (e, 'sym')) + assert (islogical (logical (e))) +***** test + % sym vectors of T/F to logical + a = sym(1); + e = [a == a a == 0 a == a]; + w = logical(e); + assert (islogical (w)) + assert (isequal (w, [true false true])) + e = e'; + w = logical(e); + assert (islogical (w)) + assert (isequal (w, [true; false; true])) +***** test + % sym matrix of T/F to logical + a = sym([1 2 3; 4 5 6]); + b = sym([1 2 0; 4 0 6]); + e = a == b; + w = logical(e); + assert (islogical (w)) + assert (isequal (w, [true true false; true false true])) +***** error + syms x + logical(x); +***** error + logical(sym(nan)) +***** test + % but oo and zoo are non-zero so we call those true + % (SMT errors on these) FIXME + syms oo zoo + assert (logical (oo)) + % assert (logical (zoo)) +***** xtest + % FIXME: bug in Octave: if should automatically use logical + % (want "if (obj)" same as "if (logical(obj))") + e = sym(true); + if (e) + assert(true); + else + assert(false); + end +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/svd.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/svd.m +***** test + % basic + A = [1 2; 3 4]; + B = sym(A); + sd = svd(A); + s = svd(B); + s2 = double(s); + assert (norm(s2 - sd) <= 10*eps) +***** test + % scalars + syms x + syms y positive + a = sym(-10); + assert (isequal (svd(a), sym(10))) + assert (isequal (svd(x), sqrt(x*conj(x)))) + assert (isequal (svd(y), y)) +***** test + % matrix with symbols + syms x positive + A = [x+1 0; sym(0) 2*x+1]; + s = svd(A); + s2 = subs(s, x, 2); + assert (isequal (s2, [sym(5); 3])) +***** test + % matrix with symbols + syms x positive + A = [x+1 0; sym(0) 2*x+1]; + s = svd(A); + s2 = subs(s, x, 2); + assert (isequal (s2, [sym(5); 3])) +***** test + % matrix with symbols, nonneg sing values + syms x real + A = [x 0; 0 sym(-5)]; + s = svd(A); + assert (isequal (s, [abs(x); 5])) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/erfcinv.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfcinv.m +***** error erfcinv (sym(1), 2) +***** assert (isequaln (erfcinv (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = erfcinv(x); + f2 = erfcinv(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = erfcinv(A); + f2 = erfcinv(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = erfcinv (d); + f = erfcinv (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/real.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/real.m +***** assert (isequal (real (sym (4) + 3i),4)) +***** test + syms x y real + z = x + 1i*y; + assert (isequal (real (z),x)) +***** test + syms x y real + Z = [4 x + 1i*y; x 4 + 3i]; + assert (isequal (real (Z),[4 x; x 4])) +***** test + syms x real + d = exp (x*i); + assert (isequal (real (d), cos (x))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + syms x + d = 3 - 5i; + f = real (x); + A = real (d); + h = function_handle (f); + B = h (d); + assert (A, B) + end +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/kron.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/kron.m +***** test + syms x y + A = [sin(x), sin(y); x, y]; + B = ones(2); + expected = sym([sin(x), sin(x), sin(y), sin(y); sin(x), sin(x), sin(y), sin(y); x, x, y, y; x, x, y, y]); + assert (isequal (kron(A, B), expected)) +***** test + syms x y + A = [sin(x), sin(y); x, y]; + B = 2; + assert (isequal (kron(A, B), 2*A)) +***** test + syms x y + A = [sin(x), sin(y)]; + B = 2; + assert (isequal( kron(B, A), 2*A)) +***** test + syms x y; + X = [tan(x), tan(x)]; + Y = [cot(x); cot(x)]; + expected = sym(ones(2)); + assert (isequal (simplify(kron(X, Y)), expected)) +***** test + syms x y z + X = [x, y, z]; + Y = [y, y; x, x]; + expected = [x*y, x*y, y^2, y^2, y*z, y*z; x^2, x^2, x*y, x*y, x*z, x*z]; + assert (isequal (kron(X, Y), expected)) +***** test + syms x y + X = [x, x^2; y, y^2]; + Y = [1, 0; 0, 1]; + expected = [x, x^2, 0, 0; y, y^2, 0, 0; 0, 0, x, x^2; 0, 0, y, y^2]; + assert (isequal (kron(Y, X), expected)) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/ldivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ldivide.m +***** test + % scalar + syms x + assert (isa (x .\ 1, 'sym')) + assert (isa (x .\ x, 'sym')) + assert (isequal (x .\ 1, 1/x)) + assert (isequal (x .\ x, sym(1))) +***** test + % matrix-scalar + D = [1 1; 2 3]; + A = sym(D); + assert (isequal ( A .\ 6 , D .\ 6 )) + assert (isequal ( A .\ sym(6) , D .\ 6 )) + assert (isequal ( D .\ sym(6) , D .\ 6 )) +***** test + % matrix-matrix + D = [1 2; 3 4]; + A = sym(D); + assert (isequal ( A .\ A , D .\ D )) + assert (isequal ( A .\ D , D .\ D )) + assert (isequal ( D .\ A , D .\ D )) +***** test + % matrix .\ matrix with symbols + syms x y + A = [x y; x^2 2*y]; + B = [y x; x y]; + assert (isequal ( A .\ A , sym(ones(2, 2)) )) + assert (isequal ( B .\ A , [x/y y/x; x 2] )) +***** test + % scalar .\ matrix + D = 3*[1 2; 3 4]; + A = sym(D); + assert (isequal ( 3 .\ A , 3 .\ D )) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/beta.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/beta.m +***** error beta (sym(1), 2, 3) +***** assert (isequal (double (beta (sym(1), 2)), 1/2)) +***** assert (isinf (double (beta (sym(1), 0)))) +***** test + % round trip + if (python_cmd('return Version(spver) > Version("1.2")')) + syms x y + f = beta (x, y); + h = function_handle (f); + A = h (1.1, 2.2); + B = beta (1.1, 2.2); + assert (A, B) + end +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/erf.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/erf.m +***** error erf (sym(1), 2) +***** assert (isequaln (erf (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = erf(x); + f2 = erf(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = erf(A); + f2 = erf(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = erf (d); + f = erf (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/argnames.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/argnames.m +***** test + % basic tests + syms x + f = 2*x; + assert (isempty (argnames(x))) + assert (isempty (argnames(f))) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/isequal.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isequal.m +***** test + a = sym([1 2]); + b = a; + assert (isequal (a, b)) + b(1) = 42; + assert (~isequal (a, b)) +***** test + a = sym([1 2; 3 4]); + b = a; + assert (isequal (a, b)) + b(1) = 42; + assert (~isequal (a, b)) +***** test + a = sym([nan; 2]); + b = a; + assert (~isequal (a, b)) +***** test + % proper nan treatment + a = sym([nan 2; 3 4]); + b = a; + assert (~isequal (a, b)) +***** test + % more than two arrays + a = sym([1 2 3]); + b = a; + c = a; + assert (isequal (a, b, c)) + c(1) = 42; + assert (~isequal (a, b, c)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/atan2.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/atan2.m +***** test + % some angles + e = sym(1); + a = atan2(0, e); + assert (isequal (a, sym(0))) + a = atan2(e, 0); + assert (isequal (a, sym(pi)/2)) +***** test + % symbols can give numerical answer + syms x positive + a = atan2(0, x); + assert (isequal (a, sym(0))) + a = atan2(x, 0); + assert (isequal (a, sym(pi)/2)) + a = atan2(-x, 0); + assert (isequal (a, -sym(pi)/2)) +***** test + % matrices + x = sym([1 -2; 0 0]); + y = sym([0 0; 8 -3]); + a = atan2(y, x); + sp = sym(pi); + aex = [0 sp; sp/2 -sp/2]; + assert (isequal (a, aex)) +***** test + % round trip + syms x y + xd = -2; yd = -3; + f = atan2 (x, y); + A = atan2 (xd, yd); + h = function_handle (f); + B = h (xd, yd); + assert (A, B, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/pinv.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/pinv.m +***** test + % scalar + syms x + assert (isequal (pinv(x), 1/x)) +***** test + % 2x3 + A = [1 2 3; 4 5 6]; + assert (max (max (abs (double (pinv (sym (A))) - pinv(A)))) <= 10*eps) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/gammainc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/gammainc.m +***** assert (isequal (gammainc (sym(0), 1), sym(0))) +***** assert (isequal (gammainc (sym(0), 2), sym(0))) +***** assert (isequal (gammainc (sym('oo'), 1), sym(1))) +***** assert (isequal (gammainc (sym(0), 1, 'upper'), sym(1))) +***** assert (isequal (gammainc (sym(0), 2, 'upper'), sym(1))) +***** assert (isequal (gammainc (sym('oo'), 1, 'upper'), sym(0))) +***** test + % default is lower + syms x a + assert (isequal (gammainc (x, a), gammainc(x, a, 'lower'))) +***** test + % compare to double + x = 5; a = 1; + A = gammainc (x, a); + B = double (gammainc (sym(x), a)); + assert(A, B, -eps) +***** test + % compare to double + x = 100; a = 1; + A = gammainc (x, a); + B = double (gammainc (sym(x), a)); + assert(A, B, -eps) +***** test + % compare to double + xs = sym(1)/1000; x = 1/1000; a = 1; + A = gammainc (x, a); + B = double (gammainc (xs, a)); + assert(A, B, -eps) +***** test + % compare to double + x = 5; a = 1; + A = gammainc (x, a, 'upper'); + B = double (gammainc (sym(x), a, 'upper')); + assert(A, B, -10*eps) +***** test + % compare to double + % https://savannah.gnu.org/bugs/index.php?47800 + if (~ exist('OCTAVE_VERSION', 'builtin') || ... + compare_versions (OCTAVE_VERSION (), '4.3.0', '>=')) + x = 10; a = 1; + A = gammainc (x, a, 'upper'); + B = double (gammainc (sym(x), a, 'upper')); + assert(A, B, -10*eps) + end +***** test + % compare to double + if (~ exist('OCTAVE_VERSION', 'builtin') || ... + compare_versions (OCTAVE_VERSION (), '4.3.0', '>=')) + x = 40; a = 1; + A = gammainc (x, a, 'upper'); + B = double (gammainc (sym(x), a, 'upper')); + assert(A, B, -10*eps) + end +***** test + % compare to double + xs = sym(1)/1000; x = 1/1000; a = 1; + A = gammainc (x, a, 'upper'); + B = double (gammainc (xs, a, 'upper')); + assert(A, B, -eps) +***** test + % vectorized + P = gammainc([sym(pi) 2], [1 3]); + expected = [gammainc(pi, sym(1)) gammainc(2, sym(3))]; + assert (isequal (P, expected)) +***** test + % vectorized + P = gammainc(sym(pi), [1 3]); + expected = [gammainc(sym(pi), 1) gammainc(sym(pi), 3)]; + assert (isequal (P, expected)) +***** test + % vectorized + P = gammainc([sym(pi) 2], 1); + expected = [gammainc(pi, sym(1)) gammainc(2, sym(1))]; + assert (isequal (P, expected)) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x a + f = gammainc (x, a, 'upper'); + h = function_handle (f, 'vars', [x a]); + A = h (1.1, 2.2); + B = gammainc (1.1, 2.2, 'upper'); + assert (A, B) + end +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x a + f = gammainc (x, a, 'lower'); + h = function_handle (f, 'vars', [x a]); + A = h (1.1, 2.2); + B = gammainc (1.1, 2.2, 'lower'); + assert (A, B) + end +19 tests, 19 passed, 0 known failure, 0 skipped +[inst/@sym/chebyshevU.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/chebyshevU.m +***** error chebyshevU (sym(1)) +***** error chebyshevU (sym(1), 2, 3) +***** assert (isequaln (chebyshevU (2, sym(nan)), sym(nan))) +***** shared x + syms x +***** assert(isequal(chebyshevU(0, x), sym(1))) +***** assert(isequal(chebyshevU(1, x), 2*x)) +***** assert(isequal(chebyshevU(2, x), 4*x*x - 1)) +***** assert(isequal(chebyshevU([0 1 2], x), [sym(1) 2*x (4*x*x-1)])) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.2")')) + syms n z + f = chebyshevU (n, z); + h = function_handle (f, 'vars', [n z]); + A = h (1.1, 2.2); + B = chebyshevU (1.1, 2.2); + assert (A, B) + end +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/uplus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/uplus.m +***** test + syms x + assert (isa (+x, 'sym')) + assert (isequal (+x, x)) +***** test + A = sym([0 -1 inf]); + assert( isequal ( +A, A)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/ceil.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ceil.m +***** error ceil (sym(1), 2) +***** assert (isequaln (ceil (sym(nan)), sym(nan))) +***** shared x, d + d = 3/2; + x = sym('3/2'); +***** test + f1 = ceil(x); + f2 = ceil(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = ceil(A); + f2 = ceil(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = ceil (d); + f = ceil (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/mpower.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/mpower.m +***** test + syms x + assert(isequal(x^(sym(4)/5), x.^(sym(4)/5))) +***** test + % integer powers of scalars + syms x + assert (isequal (x^2, x*x)) + assert (isequal (x^sym(3), x*x*x)) +***** test + % array ^ integer + syms x y + A = [x 2; y 4]; + assert (isequal (A^2, A*A)) + assert (isequal (simplify(A^3 - A*A*A), [0 0; 0 0])) +***** test + % array ^ rational + Ad = [1 2; 0 3]; + A = sym(Ad); + B = A^(sym(1)/3); + Bd = Ad^(1/3); + assert (max(max(abs(double(B) - Bd))) < 1e-14) +***** test + % non-integer power + A = sym([1 2; 0 3]); + B = A^pi; + C = [1 -1+3^sym(pi); 0 sym(3)^pi]; + assert (isequal (B, C)) +***** test + % matpow + syms n + A = sym([1 2; 3 4]); + B = A^n; + C = 10 + B + B^2; + D = subs(C, n, 1); + E = 10 + A + A^2; + assert (isequal (simplify(D), simplify(E))) +***** test + % matpow, sub in zero gives identity + A = sym([1 2; 0 3]); + syms n; + B = A^n; + C = subs(B, n, 1); + assert (isequal (C, A)) + C = subs(B, n, 0); + assert (isequal (C, sym(eye(2)))) +***** test + % scalar^array works in SymPy > 1.0.0, otherwise not implemented + syms x + A = [1 2; 3 4]; + try + B = x^A; + waserr = false; + catch + waserr = true; + notimpl = any (strfind (lasterr (), 'NotImplementedError')); + end + assert ((~ waserr && strcmp (regexprep (disp (B, 'flat'), '\s+', ''), 'x**Matrix([[1,2],[3,4]])')) || (waserr && notimpl)) +***** error + A = sym([1 2; 3 4]); + B = A^A; +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/end.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/end.m +***** test + % scalar + syms x + y = x(1:end); + assert (isequal (x, y)) +***** test + % vector + syms x + A = [1 2 x 4]; + y = A(end-1:end); + assert (isequal (y, [x 4])) +***** test + % subset of matrix + syms x + A = [1 2 x; x 3 9; 4 x*x 6]; + y = A(end,1:end-1); + assert (isequal (y, [4 x*x])) +***** test + % linear index of matrix + syms x + A = [1 2 x; x 3 9]; + y = A(end); + assert (isequal (y, sym(9))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/prevprime.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/prevprime.m +***** assert (isequal (prevprime(sym(3)), 2)); +***** assert (isequal (prevprime(sym(20)), 19)); +***** assert (isequal (prevprime(sym([3 5 10])), [2 3 7])); +***** error prevprime(sym(2)) +***** error prevprime(sym(-2)) +***** test + % result is a sym + p = prevprime(sym(3)); + assert (isa (p, 'sym')) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/adjoint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/adjoint.m +***** test + syms x + A = [x x^2; x^3 x^4]; + B = [x^4 -x^2; -x^3 x]; + assert( isequal( adjoint(A), B )) +***** test syms x + assert( isequal( adjoint(x), 1)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/ccode.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ccode.m +***** shared x,y,z + syms x y z +***** test + % basic test + f = x*sin(y) + abs(z); + source = ccode(f); + expected = 'x*sin(y) + fabs(z)'; + assert(strcmp(source, expected)) +***** test + % output test + f = x*sin(y) + abs(z); + [C, H] = ccode(f, 'file', '', 'show_header', false); + expected_c_code = sprintf('#include \"file.h\"\n#include \n\ndouble myfun(double x, double y, double z) {\n\n double myfun_result;\n myfun_result = x*sin(y) + fabs(z);\n return myfun_result;\n\n}\n'); + expected_h_code = sprintf('\n#ifndef PROJECT__FILE__H\n#define PROJECT__FILE__H\n\ndouble myfun(double x, double y, double z);\n\n#endif\n\n'); + assert(strcmp(C.name, 'file.c')) + assert(strcmp(H.name, 'file.h')) + hwin = strrep(expected_h_code, sprintf('\n'), sprintf('\r\n')); + assert (strcmp (H.code, expected_h_code) || strcmp (H.code, hwin)) + s1 = expected_c_code; + s2 = strrep(expected_c_code, sprintf('\n'), sprintf('\r\n')); + assert (strcmp (C.code, s1) || strcmp (C.code, s2)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/vertcat.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/vertcat.m +***** test + % basic + syms x + A = [x; x]; + B = vertcat(x, x); + C = vertcat(x, x, x); + assert (isa (A, 'sym')) + assert (isa (B, 'sym')) + assert (isa (C, 'sym')) + assert (isequal (size(A), [2 1])) + assert (isequal (size(B), [2 1])) + assert (isequal (size(C), [3 1])) +***** test + % basic, part 2 + syms x + A = [x; 1]; + B = [1; x]; + C = [1; 2; x]; + assert (isa (A, 'sym')) + assert (isa (B, 'sym')) + assert (isa (C, 'sym')) + assert (isequal (size(A), [2 1])) + assert (isequal (size(B), [2 1])) + assert (isequal (size(C), [3 1])) +***** test + % column vectors + a = [sym(1); 2]; + b = [sym(3); 4]; + assert (isequal ( [a;b] , [1; 2; 3; 4] )) + assert (isequal ( [a;b;a] , [1; 2; 3; 4; 1; 2] )) +***** test + % row vectors + a = [sym(1) 2]; + b = [sym(3) 4]; + assert (isequal ( [a;b] , [1 2; 3 4] )) + assert (isequal ( [a;b;a] , [1 2; 3 4; 1 2] )) +***** test + % row vector, other row + a = [sym(1) 2]; + assert (isequal ( [a; [sym(3) 4]] , [1 2; 3 4] )) +***** test + % empty vectors + v = [sym(1) sym(2)]; + a = [v; []]; + assert (isequal (a, v)) + a = [[]; v; []]; + assert (isequal (a, v)) + a = [v; []; []]; + assert (isequal (a, v)) +***** xtest + % FIXME: is this Octave bug? worth worrying about + syms x + a = [x; [] []]; + assert (isequal (a, x)) +!!!!! known failure +octave_base_value::map_value(): wrong type argument 'null_matrix' +***** test + % more empty vectors + v = [sym(1) sym(2)]; + q = sym(ones(0, 2)); + assert (isequal ([v; q], v)) +***** error + v = [sym(1) sym(2)]; + q = sym(ones(0, 3)); + w = vertcat(v, q); +***** test + % Octave 3.6 bug: should pass on 3.8.1 and matlab + a = [sym(1) 2]; + assert (isequal ( [a; [3 4]] , [1 2; 3 4] )) + assert (isequal ( [a; sym(3) 4] , [1 2; 3 4] )) + % more examples + syms x + [x [x x]; x x x]; + [[x x] x; x x x]; + [[x x] x; [x x] x]; + [x x x; [x x] x]; +***** test + % issue #700 + A = sym ([1 2]); + B = simplify (A); + assert (isequal ([B; A], [A; B])) +11 tests, 10 passed, 1 known failure, 0 skipped +[inst/@sym/dawson.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/dawson.m +***** test + if (exist ('OCTAVE_VERSION', 'builtin')) + % dawson missing on Matlab, Issue #742 + A = dawson([1 2]); + B = double(dawson(sym([1 2]))); + assert(A, B, -eps) + end +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/simplify.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/simplify.m +***** shared x,p,q + syms x + p = x^2 + x + 1; + q = horner (p); +***** assert(~isequal( p - q, 0)) +***** assert(isequal( simplify(p - q), 0)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/subsindex.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/subsindex.m +***** test + i = sym(1); + a = 7; + assert(a(i)==a); + i = sym(2); + a = 2:2:10; + assert(a(i)==4); +***** test + i = sym([1 3 5]); + a = 1:10; + assert( isequal (a(i), [1 3 5])) +***** test + i = sym([1 3 5]); + a = sym(1:10); + assert( isequal (a(i), sym([1 3 5]))); +***** test + % should be an error if it doesn't convert to double + syms x + a = 1:10; + try + a(x) + waserr = false; + catch + waserr = true; + end + assert(waserr) +***** test + syms x + assert (isequal (x(sym (true)), x)) + assert (isequal (x(sym (false)), sym ([]))) +***** test + x = 6; + assert (isequal (x(sym (true)), 6)) + assert (isequal (x(sym (false)), [])) +***** test + a = sym([10 12 14]); + assert (isequal (a(sym ([true false true])), a([1 3]))) + assert (isequal (a(sym ([false false false])), sym (ones(1,0)))) +***** test + a = [10 11; 12 13]; + p = [true false; true true]; + assert (isequal (a(sym (p)), a(p))) + p = [false false false]; + assert (isequal (a(sym (p)), a(p))) +***** error + a = [10 12]; + I = [sym(true) 2]; + b = a(I); +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/tand.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/tand.m +***** error tand (sym(1), 2) +***** assert (isequaln (tand (sym(nan)), sym(nan))) +***** test + f1 = tand (sym(1)); + f2 = tand (1); + assert (double (f1), f2, -eps) +***** test + D = [10 30; 110 -45]; + A = sym(D); + f1 = tand (A); + f2 = tand (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/fix.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/fix.m +***** test + d = 3/2; + x = sym('3/2'); + f1 = fix(x); + f2 = fix(d); + assert (isequal (f1, f2)) +***** test + D = [1.1 4.6; -3.4 -8.9]; + A = [sym(11)/10 sym(46)/10; sym(-34)/10 sym(-89)/10]; + f1 = fix(A); + f2 = fix(D); + assert( isequal (f1, f2)) +***** test + d = sym(-11)/10; + c = -1; + assert (isequal (fix (d), c)) +***** test + d = sym(-19)/10; + c = -1; + assert (isequal (fix (d), c)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/ezcontour.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ezcontour.m +***** error + syms x y z + ezcontour (x*y*z) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/cond.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cond.m +***** test + A = [1 2; 3 4]; + B = sym(A); + k1 = cond(A); + k2 = cond(B); + k3 = double(k2); + assert (k1 - k3 <= 100*eps) +***** test + % matrix with symbols + syms x positive + A = [x 0; sym(0) 2*x]; + k1 = cond(A); + assert (isequal (k1, sym(2))) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/sin.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sin.m +***** error sin (sym(1), 2) +***** assert (isequaln (sin (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = sin(x); + f2 = sin(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = sin(A); + f2 = sin(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = sin (d); + f = sin (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/dot.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/dot.m +***** error dot (sym(1), 2, 3) +***** test + a = sym([1; 1; 0]); + b = sym([1; 2; 4]); + c = dot(a, b); + assert (isequal (c, sym(3))) +***** test + syms x + a = sym([x; 0; 0]); + b = sym([0; 1; 0]); + c = dot(a, b); + assert (isequal (c, sym(0))) +***** test + assert (isequal (dot (sym([1 i]), sym([i 2])), sym(-i))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticE.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticE.m +***** error ellipticE (sym(1), 2, 3) +***** assert (double (ellipticE (sym (-105)/10)), 3.70961391, 10e-9) +***** assert (double (ellipticE (sym (-pi)/4)), 1.844349247, 10e-10) +***** assert (double (ellipticE (sym (0))), 1.570796327, 10e-10) +***** assert (double (ellipticE (sym (1))), 1, 10e-1) +***** test + % compare to Maple + us = vpa (ellipticE (sym(7)/6, sym(13)/7), 40); + % > evalf(EllipticE(sin(7/6), sqrt(13/7)), 40); + maple = vpa ('0.6263078268598504591831743625971763209496', 40) + ... + vpa ('0.1775496232203171126975790989055865596501j', 40); + assert (abs (double (maple - us)), 0, 2e-39) +***** test + % compare to Maple + us = vpa (ellipticE (sym(8)/7), 40); + % > evalf(EllipticE(sqrt(8/7)), 40); + maple = vpa ('0.8717182992576322508542205614105802333270', 40) + ... + vpa ('0.1066754320328976949531350910798010526685j', 40); + assert (abs (double (maple - us)), 0, 2e-39) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/null.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/null.m +***** test + A = sym([1 2; 3 4]); + assert (isempty (null (A))) +***** assert (isempty (null (sym(4)))) +***** test + A = sym([1 2 3; 3 4 5]); + assert (isequal (null(A), sym([1;-2;1]))) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/subsasgn.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/subsasgn.m +***** shared a,b + b = [1:4]; + a = sym(b); +***** test a(1) = 10; b(1) = 10; + assert(isequal( a, b )) +***** test I = logical([1 0 1 0]); + a(I) = 2; b(I) = 2; + assert(isequal( a, b )) +***** test I = logical([1 0 1 0]); + a(I) = [2 4]; b(I) = [2 4]; + assert(isequal( a, b )) +***** test I = logical([1 0 1 0]); + a(I) = [2; 4]; b(I) = [2; 4]; + assert(isequal( a, b )) +***** shared +***** test + b = 1:4; b = [b; 2*b; 3*b]; + a = sym(b); + rhs = [10 11; 12 13]; + a([1:2],[1:2]) = rhs; + b([1:2],[1:2]) = rhs; + assert(isequal( a, b )) + a(1:2,1:2) = rhs; + assert(isequal( a, b )) +***** test + % slice : + b = 1:4; b = [b; 2*b]; + a = sym(b); + rhs = [10 11; 12 13]; + a(:,2:3) = rhs; + b(:,2:3) = rhs; + assert(isequal( a, b )) +***** test + % grow 2D + b = 1:4; b = [b; 2*b]; + a = sym(b); + rhs = [10 11; 12 13]; + a([1 end+1],end:end+1) = rhs; b([1 end+1],end:end+1) = rhs; assert(isequal( a, b )) ***** test @@ -5004,73 +6737,6 @@ A(d) = 2; B(d) = 2; assert (isequal (A, B)) 59 tests, 59 passed, 0 known failure, 0 skipped -[inst/@sym/cosint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosint.m -***** error cosint (sym(1), 2) -***** xtest - assert (isequaln (cosint (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (cosint (sym (nan)), sym (nan))) failed -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = cosint(x); - f2 = 0.3374039229009681346626; - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = cosint(A); - f2 = 0.3374039229009681346626; - f2 = [f2 f2; f2 f2]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = cosint (d); - f = cosint (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) - end -5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/acsch.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acsch.m -***** error acsch (sym(1), 2) -***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - assert (isequaln (acsch (sym(nan)), sym(nan))) - end -***** shared x, d - d = 1; - x = sym('1'); -***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - f1 = acsch(x); - f2 = acsch(d); - assert( abs(double(f1) - f2) < 1e-15 ) - end -***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - D = [d d; d d]; - A = [x x; x x]; - f1 = acsch(A); - f2 = acsch(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) - end -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = acsch (d); - f = acsch (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) - end -5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/has.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/has.m ***** shared A, x, y @@ -5081,216 +6747,330 @@ ***** assert (isequal (has(A, 2), [false true; false false])); ***** assert (isequal (has(A, sym(pi)), [true true; false false])); 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/prod.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/prod.m -***** error prod (sym(1), 2, 3) -***** error prod (sym(1), 42) -***** shared x,y,z - syms x y z -***** assert (isequal (prod (x), x)) -***** assert (isequal (prod ([x y z]), x*y*z)) -***** assert (isequal (prod ([x; y; z]), x*y*z)) -***** assert (isequal (prod ([x y z], 1), [x y z])) -***** assert (isequal (prod ([x y z], 2), x*y*z)) -***** shared a,b - b = [1 2; 3 4]; a = sym(b); -***** assert (isequal (prod(a), prod(b))) -***** assert (isequal (prod(a,1), prod(b,1))) -***** assert (isequal (prod(a,2), prod(b,2))) +[inst/@sym/ismatrix.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ismatrix.m +***** assert(ismatrix(sym('x'))) +***** assert(ismatrix(sym([1 2 3]))) +***** assert(ismatrix(sym([1; 2]))) +***** assert(ismatrix(sym([1 2; 3 4]))) +***** assert(ismatrix(sym([]))) +***** assert(ismatrix(sym(ones(1,0)))) +***** assert(ismatrix(sym(ones(0,3)))) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/atand.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/atand.m +***** error atand (sym(1), 2) +***** assert (isequaln (atand (sym(nan)), sym(nan))) ***** test - % weird inputs - a = prod('xx', sym(1)); - assert (isequal (a, sym('xx'))) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/hessian.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/hessian.m -***** shared x,y,z + f1 = atand (sym(1)/2); + f2 = atand (1/2); + assert (double (f1), f2, -eps) +***** test + D = [1 2; 3 4]/4; + A = sym([1 2; 3 4])/4; + f1 = atand (A); + f2 = atand (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/int.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/int.m +***** shared x,y,a + syms x y a +***** assert(logical(int(cos(x)) - sin(x) == 0)) +***** assert(logical(int(cos(x),x) - sin(x) == 0)) +***** assert(logical(int(cos(x),x,0,1) - sin(sym(1)) == 0)) +***** test + %% limits might be syms + assert( isequal (int(cos(x),x,sym(0),sym(1)), sin(sym(1)))) + assert( isequal (int(cos(x),x,0,a), sin(a))) +***** test + %% other variables present + assert( isequal (int(y*cos(x),x), y*sin(x))) +***** test + %% limits as array + assert( isequal (int(cos(x),x,[0 1]), sin(sym(1)))) + assert( isequal (int(cos(x),x,sym([0 1])), sin(sym(1)))) + assert( isequal (int(cos(x),x,[0 a]), sin(a))) +***** test + %% no x given + assert( isequal (int(cos(x),[0 1]), sin(sym(1)))) + assert( isequal (int(cos(x),sym([0 1])), sin(sym(1)))) + assert( isequal (int(cos(x),[0 a]), sin(a))) + assert( isequal (int(cos(x),0,a), sin(a))) +***** test + %% integration of const + assert( isequal (int(sym(2),y), 2*y)) + assert( isequal (int(sym(2)), 2*x)) + assert( isequal (int(sym(2),[0 a]), 2*a)) + assert( isequal (int(sym(2),0,a), 2*a)) +***** test + % componentwise int of array + A = [x x*x]; + assert (isequal (int(A, x), [x^2/2 x^3/3])) +***** test + % NonElementaryIntegral bug + % https://savannah.gnu.org/bugs/index.php?46831 + f = int(exp(exp(x))); + f = f + 2; + g = diff(f); + assert (isequal (g, exp(exp(x)))) +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/@sym/solve.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/solve.m +***** test + % Simple, single variable, single solution + syms x + d = solve(10*x == 50); + assert (isequal (d, 5)) +***** test + % Single variable, multiple solutions + syms x + d = solve(x^2 == 4); + assert (length(d) == 2); + assert (isequal (d, [2; -2]) || isequal (d, [-2; 2])) +***** shared x,y,eq + syms x y + eq = 10*x == 20*y; +***** test + d = solve(eq, x); + assert (isequal (d, 2*y)) +***** test + d = solve(eq, y); + assert (isequal (d, x/2)) +***** test + d = solve(eq); + assert (isequal (d, 2*y)) +***** shared x,y + syms x y +***** test + d = solve(2*x - 3*y == 0, x + y == 1); + assert (isequal (d.x, sym(3)/5) && isequal(d.y, sym(2)/5)) +***** test + d = solve(2*x - 3*y == 0, x + y == 1, x, y); + assert (isequal (d.x, sym(3)/5) && isequal(d.y, sym(2)/5)) +***** test + % Multiple solutions, multiple variables + d = solve(x^2 == 4, x + y == 1); + assert (length(d) == 2); + % FIXME: SMT has d.x gives vector and d.y giving vector, what is + % more intuitive? + for i = 1:2 + assert (isequal (d{i}.x + d{i}.y, 1)) + assert (isequal ((d{i}.x)^2, 4)) + end +***** test + % No solutions syms x y z + d = solve(x == y, z); + assert (isempty (d)); ***** test - % 1D - f = x^2; - assert (isequal (hessian(f), diff(f,x,x))) - assert (isequal (hessian(f,{x}), diff(f,x,x))) - assert (isequal (hessian(f,x), diff(f,x,x))) + % Multiple outputs with single solution + [X, Y] = solve(2*x + y == 5, x + y == 3); + assert (isequal (X, 2)) + assert (isequal (Y, 1)) ***** test - % const - f = sym(1); - g = sym(0); - assert (isequal (hessian(f), g)) - assert (isequal (hessian(f,x), g)) + % system: vector of equations, vector of vars + [X, Y] = solve([2*x + y == 5, x + y == 3], [x y]); + assert (isequal (X, 2)) + assert (isequal (Y, 1)) ***** test - % double const - f = 1; - g = sym(0); - assert (isequal (hessian(f,x), g)) + % system: vector of equations, individual vars + [X, Y] = solve([2*x + y == 5, x + y == 3], x, y); + assert (isequal (X, 2)) + assert (isequal (Y, 1)) ***** test - % linear - f = 42*x; - g = sym(0); - assert (isequal (hessian(f), g)) - assert (isequal (hessian(f,x), g)) + % system: individual equations, vector of vars + [X, Y] = solve(2*x + y == 5, x + y == 3, [x y]); + assert (isequal (X, 2)) + assert (isequal (Y, 1)) ***** test - % linear - f = 42*x - sym('a')*y; - g = [0 0; 0 0]; - assert (isequal (hessian(f, {x y}), g)) + % Multiple outputs with multiple solns + [X, Y] = solve(x*x == 4, x == 2*y); + assert ((isequal (X, [2; -2]) && isequal (Y, [1; -1])) || ... + (isequal (X, [-2; 2]) && isequal (Y, [-1; 1]))) ***** test - % 2d - f = x*cos(y); - g = [0 -sin(y); -sin(y) -f]; - assert (isequal (hessian(f), g)) - assert (isequal (hessian(f, {x y}), g)) + % Multiple outputs with multiple solns, specify vars + [X, Y] = solve(x*x == 4, x == 2*y, x, y); + assert ((isequal (X, [2; -2]) && isequal (Y, [1; -1])) || ... + (isequal (X, [-2; 2]) && isequal (Y, [-1; 1]))) +***** error + % mult outputs not allowed for scalar equation, even with mult soln (?) + [s1, s2] = solve(x^2 == 4, x); ***** test - % 3d - f = x*cos(z); - Hexp = [0 0 -sin(z); sym(0) 0 0; -sin(z) 0 -f]; - H = hessian(f, {x y z}); - assert (isequal (H, Hexp)) -***** error hessian([sym(1) sym(2)]) -***** error hessian(sym(1), 2, 3) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/asin.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/asin.m -***** error asin (sym(1), 2) -***** assert (isequaln (asin (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); + % overdetermined + X = solve(2*x - 10 == 0, 3*x - 15 == 0, x); + assert (isequal (X, sym(5))) ***** test - f1 = asin(x); - f2 = asin(d); - assert( abs(double(f1) - f2) < 1e-15 ) + a = solve(2*x >= 10, 10*x <= 50); + assert (isequal( a, x==sym(5))) ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = asin(A); - f2 = asin(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + A = solve([2*x == 4*y, 2 == 3], x); + assert (isequal (A, sym(false))) ***** test - % round trip - y = sym('y'); - A = asin (d); - f = asin (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/lambertw.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/lambertw.m + % Issue #850 + if (python_cmd('return Version(spver) > Version("1.1.1")')) + A = solve (sym(pi)^2*x + y == 0); + assert (isequal (A, -y/sym(pi)^2)) + end ***** test - % W(x)*exp(W(x)) == x + % https://github.com/sympy/sympy/issues/14632 + A = solve([2*x == 4*y, sym(2) == 2], x); + assert (isequal (A, 2*y)) +***** test + % https://github.com/sympy/sympy/issues/14632 + A = solve([2*x^2 == 32*y^2, sym(2) == 2], x); + B = solve([2*x^2 == 32*y^2], x); + assert (isequal (A, B) || isequal (A, flip (B))) +***** test + A = solve ([x+1 0], x); + assert (isequal (A, sym (-1))) +***** test + A = solve (x + 1, x); + assert (isequal (A, sym (-1))) + A = solve (x, x); + assert (isequal (A, sym (0))) +24 tests, 24 passed, 0 known failure, 0 skipped +[inst/@sym/coeffs.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/coeffs.m +***** error coeffs (sym(1), 2, 3, 4) +***** error coeffs (sym(1), 2, 'al') +***** error coeffs (sym(1), 'al') +***** test + % simple syms x - T = lambertw(x)*exp(lambertw(x)); - T = double (subs (T, x, 10)); - assert (isequal (T, 10)); + [c, t] = coeffs(6*x*x + 27); + assert (isequal (c, [6 27])) + assert (isequal (t, [x*x 1])) ***** test - % k, x not x, k to match SMT + % specify a variable syms x - T = lambertw(2, x)*exp(lambertw(2, x)); - T = double (subs (T, x, 10)); - assert (abs(T - 10) < 1e-15) -***** assert (isequal (lambertw(sym(0)), sym(0))) -***** assert ( isequal (lambertw (-1/exp(sym(1))), -sym(1))) -***** assert ( isequal (lambertw (0, -1/exp(sym(1))), -sym(1))) -***** assert ( isequal (lambertw (-1, -1/exp(sym(1))), -sym(1))) -***** xtest - % W(x)*exp(W(x)) == x; FIXME: a failure in SymPy? + [c, t] = coeffs(6*x*x + 27, x); + assert (isequal (c, [6 27])) + assert (isequal (t, [x*x 1])) +***** test + % specify another variable + syms x y + [c, t] = coeffs(6*x + 27, y); + assert (isequal (c, 6*x + 27)) + assert (isequal (t, 1)) +***** test + % weird SMT order syms x - T = simplify(lambertw(x)*exp(lambertw(x))); - assert (isequal (T, x)) -!!!!! known failure -assert (isequal (T, x)) failed -***** assert (abs (lambertw(pi) - double(lambertw(sym(pi)))) < 5*eps) -***** assert (abs (lambertw(-1, 5) - double(lambertw(-1, sym(5)))) < 5*eps) -***** assert (abs (lambertw(2, 2) - double(lambertw(2, sym(2)))) < 5*eps) + a1 = [27 6]; + a2 = [6 27]; + c = coeffs(6*x*x + 27); + assert (isequal (c, a1)) + coeffs(6*x*x + 27); + assert (isequal (ans, a1)) + [c, t] = coeffs(6*x*x + 27); + assert (isequal (c, a2)) ***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x k - A = lambertw (5); - f = lambertw (x); - h = function_handle (f); - B = h (5); - assert (A, B) - - A = lambertw (3, 5); - f = lambertw (k, x); - h = function_handle (f); - B = h (3, 5); - assert (A, B) - end -11 tests, 10 passed, 1 known failure, 0 skipped -[inst/@sym/disp.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/disp.m + % no weird order with "all" + syms x + c = coeffs(6*x*x + 27, 'all'); + assert (isequal (c, [6 0 27])) ***** test + % "all" syms x - s = disp(sin(x)); - assert(strcmp(s, sprintf(' sin(x)\n'))) + [c, t] = coeffs(6*x*x + 27, 'all'); + assert (isequal (c, [6 0 27])) + assert (isequal (t, [x^2 x 1])) ***** test + % "All" syms x - s = disp(sin(x/2), 'flat'); - assert(strcmp(s, sprintf(' sin(x/2)\n'))) + [c, t] = coeffs(6*x, 'All'); + assert (isequal (c, [6 0])) + assert (isequal (t, [x 1])) ***** test - % Examples of 2x0 and 0x2 empty matrices: - a = sym([1 2; 3 4]); - b2x0 = a([true true], [false false]); - b0x2 = a([false false], [true true]); - assert (isequal (size (b2x0), [2 0])) - assert (isequal (size (b0x2), [0 2])) - s = disp(b2x0); - assert(strcmp(s, sprintf(' []\n'))) - s = disp(b0x2); - assert(strcmp(s, sprintf(' []\n'))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/xor.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/xor.m -***** shared t, f - t = sym(true); - f = sym(false); + % multivariable array + syms x y + [c, t] = coeffs(6*x*x + 27*y*x + 36, [x y]); + a = [6 27 36]; + s = [x^2 x*y 1]; + assert (isequal (c, a)) + assert (isequal (t, s)) + % with list + [c, t] = coeffs(6*x*x + 27*y*x + 36, {x y}); + assert (isequal (c, a)) + assert (isequal (t, s)) ***** test - % simple - assert (isequal (xor(t, f), t)) - assert (isequal (xor(t, t), f)) + % other symbols treated as part of coeffs + syms x y + [c, t] = coeffs(6*x*x + 27*y*x + 36, x); + a = [6 27*y 36]; + s = [x^2 x 1]; + assert (isequal (c, a)) + assert (isequal (t, s)) +***** error + % TODO: multivariate all not working (https://github.com/cbm755/octsympy/issues/720) + syms x y + [c, t] = coeffs(6*x^2 + 7*y + 19, [x y], 'all'); ***** test - % array - w = [t t f f]; - z = [t f t f]; - assert (isequal (xor(w, z), [f t t f])) -***** xtest - % output is sym even for scalar t/f - % ₣IXME: should match other bool fcns - assert (isa (xor(t, f), 'sym')) + % empty same as not specifying; maybe not SMT compatible: + % https://github.com/cbm755/octsympy/pull/708#discussion_r94292831 + syms x y + [c, t] = coeffs(6*x*x + 27*y*x + 36, {}); + a = [6 27 36]; + assert (isequal (c, a)) + [c, t] = coeffs(6*x*x + 27*y*x + 36); + assert (isequal (c, a)) ***** test - % eqns + % no input defaults to all symbols (not symvar to get x) + syms x y + [c, t] = coeffs(6*x*x + 27*y*x + 36); + assert (isequal (c, [6 27 36])) +***** test + % non sym input syms x - e = xor(x == 4, x == 5); - assert (isequal (subs(e, x, [3 4 5 6]), [f t t f])) + assert (isequal (coeffs(6, x), sym(6))) ***** test - % eqns, exclusive + % constant input without x + assert (isequal (coeffs(sym(6)), sym(6))) +***** test + % constant input without x + assert (isequal (coeffs (sym(6), {}), sym(6))) + % irrational coefficients syms x - e = xor(x == 3, x^2 == 9); - assert (isequal (subs(e, x, [-3 0 3]), [t f f])) -***** error xor (sym('x'), 1, 2) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/bessely.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/bessely.m + f = x^2 + sqrt(sym(2))*x; + [c1, t1] = coeffs (f); + [c2, t2] = coeffs (f, x); + assert (isequal (c1, c2)) + assert (isequal (t1, t2)) +18 tests, 18 passed, 0 known failure, 0 skipped +[inst/@sym/hypot.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/hypot.m +***** assert (isequal (hypot (sym(3), 4), sym(5))) ***** test - X = [1 2 3; 4 5 6]; - ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; - n = double(ns); - A = double(bessely(ns, X)); - B = bessely(n, X); - assert (all (all (abs (A - B) < 50*eps*abs(A)))) + % compare to @double (note Matlab hypot only takes 2 inputs) + A = hypot (hypot ([1 2 3], [4 5 6]), [7 8 9]); + B = double (hypot (sym([1 2 3]), [4 5 6], [7 8 9])); + assert (A, B, -eps) +***** test + % compare to @double, with complex + A = hypot ([1+2i 3+4i], [1 3+1i]); + B = double (hypot (sym([1+2i 3+4i]), [1 3+1i])); + assert (A, B, -eps) +***** test + % matrices + x = sym([1 -2; 0 3]); + y = sym([0 0; 8 4]); + A = hypot (x, y); + B = sym([1 2; 8 5]); + assert (isequal (A, B)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/isconstant.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isconstant.m ***** test - % roundtrip syms x - A = bessely(2, 10); - q = bessely(2, x); - h = function_handle(q); - B = h(10); - assert (abs (A - B) <= eps*abs(A)) -***** error bessely(sym('x')) -3 tests, 3 passed, 0 known failure, 0 skipped + A = [x 2 3]; + B = [false true true]; + assert (isequal (isconstant(A), B)) +***** test + syms x + A = [x 2; 3 x]; + B = [false true; true false]; + assert (isequal (isconstant(A), B)) +2 tests, 2 passed, 0 known failure, 0 skipped [inst/@sym/fresnels.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/fresnels.m ***** test @@ -5316,279 +7096,829 @@ assert (A, B) end 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/symsum.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/symsum.m -***** error symsum (sym(1), 2, 3, 4, 5) +[inst/@sym/sym2poly.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sym2poly.m +***** shared x,y,a,b,c + syms x y a b c +***** assert (isequal (sym2poly (x^2 + 3*x - 4), [1 3 -4])) +***** assert (isequal (sym2poly (x^6 - x^3), [1 0 0 -1 0 0 0])) +***** assert (isequal (sym2poly (x^2 + 3*x - 4, x), [1 3 -4])) +***** assert (norm (sym2poly (pi*x^2 + exp(sym(1))) - [pi 0 exp(1)]) < 10*eps) +***** assert (isa (sym2poly (x^2 + 3*x - 4), 'double')) +***** assert (isa (sym2poly (x^2 + 3*x - 4, x), 'sym')) +***** assert (isequal (sym2poly (x^2+y*x, x), [sym(1) y sym(0)])) +***** assert (isequal (sym2poly (x^2+y*x, y), [x x^2])) +***** assert (isequal (sym2poly (poly2sym ([a b c], x), x), [a b c])) +***** assert (isequal (poly2sym (sym2poly(a*x^2 + c, x), x), a*x^2 + c)) +***** assert (isequal (sym2poly (poly2sym ([1 2 3])), [1 2 3])) +***** error + % too many symbols for single-input + p = a*x^2 + 2; + c = sym2poly (p); +12 tests, 12 passed, 0 known failure, 0 skipped +[inst/@sym/cbrt.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cbrt.m +***** error cbrt (sym(1), 2) +***** assert (isequaln (cbrt (sym(nan)), sym(nan))) +***** shared x, d + d = 2; + x = sym('2'); ***** test - % finite sums - syms n - assert (isequal (symsum(n,n,1,10), 55)) - assert(isa(symsum(n,n,1,10), 'sym')) - assert (isequal (symsum(n,n,sym(1),sym(10)), 55)) - assert (isequal (symsum(n,n,sym(1),sym(10)), 55)) - assert (isequal (symsum(1/n,n,1,10), sym(7381)/2520)) + f1 = cbrt(x); + f2 = 1.2599210498948731647; + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % negative limits - syms n - assert (isequal (symsum(n,n,-3,3), sym(0))) - assert (isequal (symsum(n,n,-3,0), sym(-6))) - assert (isequal (symsum(n,n,-3,-1), sym(-6))) + D = [d d; d d]; + A = [x x; x x]; + f1 = cbrt(A); + f2 = 1.2599210498948731647; + f2 = [f2 f2; f2 f2]; + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % one input - syms n - f = symsum (n); - g = n^2/2 - n/2; - assert (isequal (f, g)) - f = symsum (2*n); - g = n^2 - n; - assert (isequal (f, g)) + % round trip + y = sym('y'); + if (exist ('OCTAVE_VERSION', 'builtin')) + A = cbrt (d); + else + % Issue #742 + A = d^(1/3); + end + f = cbrt (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/isrow.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isrow.m +***** assert (isrow (sym ([1]))) +***** assert (isrow (sym ([1 2 3]))) +***** assert (~isrow (sym ([]))) +***** assert (~isrow (sym ([1 2 3]'))) +***** assert (~isrow (sym ([1 2; 3 4]))) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/unique.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/unique.m ***** test - % constant input - f = symsum (sym(2)); + A = sym([1 2 3 3 5 3 2 6 5]); + B = sym([1 2 3 5 6]); + assert (isequal (unique(A), B)) +***** test + syms x y + A = [1 2 3 3 4 5 5 6 7 7 x x y y]; + B = [1 2 3 4 5 6 7 x y]; + assert (isequal (unique(A), B)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/pretty.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/pretty.m +***** test + % simple syms x - g = 2*x; - assert (isequal (f, g)) + s1 = pretty(sin(x)); + s2 = sprintf(' sin(x)\n'); + assert (strcmp (s1, s2)) ***** test - % two inputs - syms n - f = symsum (2*n, n); - g = n^2 - n; - assert (isequal (f, g)) + % force ascii + syms x + s1 = pretty(sin(x/2), 'ascii'); + s2 = sprintf(' /x\\\n sin|-|\n \\2/\n'); + swin = strrep(s1, sprintf('\r\n'), sprintf('\n')); + assert (strcmp (s1, s2) || strcmp (swin, s2)) ***** test - % two inputs, second is range - syms n - f = symsum (n, [1 6]); - g = 21; - assert (isequal (f, g)) - f = symsum (n, [sym(1) 6]); - g = 21; - assert (isequal (f, g)) - f = symsum (2*n, [1 6]); - g = 2*21; - assert (isequal (f, g)) + % force unicode + syms x + s1 = pretty(sin(x/2), 'unicode'); + s2 = sprintf(' ⎛x⎞\n sin⎜─⎟\n ⎝2⎠\n'); + swin = strrep(s1, sprintf('\r\n'), sprintf('\n')); + assert (strcmp (s1, s2) || strcmp (swin, s2)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/psi.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/psi.m +***** assert (isequal (psi (sym (1)), -eulergamma)) +***** assert (isequal (psi (1, sym (1)), sym (pi)^2/6)) +***** assert (isinf (psi (sym ('inf')))) ***** test - % three inputs, last is range - syms n - f = symsum (2*n, n, [1 4]); - g = sym(20); - assert (isequal (f, g)) - f = symsum (2*n, n, [sym(1) 4]); - g = sym(20); - assert (isequal (f, g)) - f = symsum (2, n, [sym(1) 4]); - g = sym(8); - assert (isequal (f, g)) + % compare to Maple: evalf(Psi(-101/100)); + maple = vpa ('100.3963127058453949545769053445198842332424', 40); + us = vpa (psi (sym (-101)/100), 40); + assert (abs(double(maple-us)) < 1e-39) ***** test - % three inputs, no range - syms n - f = symsum (2*n, 1, 4); - g = sym(20); - assert (isequal (f, g)) - f = symsum (5, sym(1), 3); - g = sym(15); - assert (isequal (f, g)) + % compare to Maple: evalf(Psi(1, 3*I-2)); + maple = vpa ('-0.1651414829219882371561038184133243839778799', 40) - ... + vpa ('0.1960040752985823275302034466611711263617296j', 40); + us = vpa (psi (1, sym (-2) + sym(3i)), 40); + assert (abs(double(maple-us)) < 1e-39) ***** test - % ok to use double's for arguments in infinite series - syms n oo - assert(isequal(symsum(1/n^2,n,1,oo), sym(pi)^2/6)) - assert(isequal(symsum(1/n^2,n,1,inf), sym(pi)^2/6)) + % should match @double/psi + if (exist ('psi','builtin')) + assert (psi (pi), double (psi (sym (pi))), -3*eps) + assert (psi (100), double (psi (sym (100))), -3*eps) + assert (psi (1e-3), double (psi (1/sym (1e3))), -3*eps) + if (exist ('OCTAVE_VERSION', 'builtin')) + % 2014a doesn't support negative or complex arguments + assert (psi (-1.5), double (psi (sym (-3)/2)), -3*eps) + assert (psi (-8.3), double (psi (sym (-83)/10)),-4*eps) + assert (psi (2i), double (psi (sym (2i))), -3*eps) + assert (psi (10i+3), double (psi (sym (10i)+3)), -3*eps) + end + end ***** test - % should be oo because 1 is real but seems to be - % zoo/oo depending on sympy version - syms n oo - zoo = sym('zoo'); - assert (isequal (symsum(1/n,n,1,oo), oo) || ... - isequal (symsum(1/n,n,1,oo), zoo)) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/rank.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rank.m + % @double/psi loses accuracy near the poles: note higher rel tol + if (exist ('psi','builtin')) + if (exist ('OCTAVE_VERSION', 'builtin')) + assert (psi (-1.1), double (psi (sym (-11)/10)), -6*eps) + assert (psi (-1.01), double (psi (sym (-101)/100)), -50*eps) + end + end ***** test - A = sym([1 2; 3 4]); - assert (rank(A) == 2); + if (exist ('psi','builtin')) + assert (psi (1, pi), double (psi (1, sym (pi))), -3*eps) + assert (psi (1, 100), double (psi (1, sym (100))), -3*eps) + assert (psi (1, 1e-4), double (psi (1, 1/sym (1e4))), -3*eps) + end ***** test - A = sym([1 2 3; 3 4 5]); - assert (rank(A) == 2); + if (exist ('psi','builtin')) + assert (psi (2, pi), double (psi (2, sym (pi))), -3*eps) + assert (psi (2, 1000), double (psi (2, sym (1000))), -3*eps) + assert (psi (2, 1e-4), double (psi (2, 1/sym (1e4))), -3*eps) + end ***** test - A = sym([1 2; 1 2]); - assert (rank(A) == 1); + % round trip + if (exist ('psi','builtin')) + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x + f = psi (x); + h = function_handle (f); + A = h (1.1); + B = psi (1.1); + assert (A, B) + end + end +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/@sym/logint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/logint.m +***** error logint (sym(1), 2) +***** xtest + assert (isequaln (logint (sym(nan)), sym(nan))) +!!!!! known failure +assert (isequaln (logint (sym (nan)), sym (nan))) failed +***** shared x, d + d = 2; + x = sym('2'); ***** test - A = sym([1 2; 3 4]); - assert (rank(A) == 2); -***** assert (rank(sym(1)) == 1); -***** assert (rank(sym(0)) == 0); -***** assert (rank(sym('x', 'positive')) == 1); -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/asech.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/asech.m -***** error asech (sym(1), 2) -***** assert (isequaln (asech (sym(nan)), sym(nan))) + f1 = logint(x); + f2 = 1.045163780117492784845; + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = logint(A); + f2 = 1.045163780117492784845; + f2 = [f2 f2; f2 f2]; + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + y = sym('y'); + A = logint (d); + f = logint (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) + end +5 tests, 4 passed, 1 known failure, 0 skipped +[inst/@sym/sinint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinint.m +***** error sinint (sym(1), 2) +***** xtest + assert (isequaln (sinint (sym(nan)), sym(nan))) +!!!!! known failure +assert (isequaln (sinint (sym (nan)), sym (nan))) failed ***** shared x, d - d = 1/2; - x = sym('1/2'); + d = 1; + x = sym('1'); ***** test - f1 = asech(x); - f2 = asech(d); + f1 = sinint(x); + f2 = 0.9460830703671830149414; assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = asech(A); - f2 = asech(D); + f1 = sinint(A); + f2 = 0.9460830703671830149414; + f2 = [f2 f2; f2 f2]; assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = asech (d); - f = asech (y); + A = sinint (d); + f = sinint (y); h = function_handle (f); B = h (d); assert (A, B, -eps) end +5 tests, 4 passed, 1 known failure, 0 skipped +[inst/@sym/imag.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/imag.m +***** assert (isequal (imag (sym (4) + 3i),3)) +***** test + syms x y real + z = x + 1i*y; + assert (isequal (imag (z),y)) +***** test + syms x y real + Z = [4 x + 1i*y; 1i*y 4 + 3i]; + assert (isequal (imag (Z),[0 y; y 3])) +***** test + syms x real + d = exp (x*i); + assert (isequal (imag (d), sin (x))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + syms x + d = 3 - 5i; + f = imag (x); + A = imag (d); + h = function_handle (f); + B = h (d); + assert (A, B) + end 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/besseli.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besseli.m +[inst/@sym/columns.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/columns.m ***** test - X = [1 2 3; 4 5 6]; - ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; - n = double(ns); - A = double(besseli(ns, X)); - B = besseli(n, X); - assert (all (all (abs (A - B) < 100*eps*abs(A)))) + a = sym([1 2 3]); + assert (columns(a) == 3) +***** test + a = sym([1; 2]); + assert (columns(a) == 1) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/latex.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/latex.m ***** test - % roundtrip syms x - A = besseli(2, 10); - q = besseli(2, x); - h = function_handle(q); - B = h(10); - assert (abs (A - B) <= eps*abs(A)) -***** error besseli(sym('x')) + y = sin(x); + assert ( strcmp( latex(y), '\sin{\left (x \right )}')) + assert ( strcmp( latex(exp(x)), 'e^{x}')) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/transpose.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/transpose.m +***** test + x = sym(1); + assert (isequal (x.', x)) +***** assert (isempty (sym([]).')) +***** test + syms x; + assert (isequal (x.', x)) +***** test + A = [1 2; 3 4]; + assert(isequal( sym(A).' , sym(A.') )) +***** test + A = [1 2] + 1i; + assert(isequal( sym(A).' , sym(A.') )) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/rref.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rref.m +***** test + A = sym([1 2; 3 4]); + [r, k] = rref(A); + assert (isequal (r, eye(2))) + assert (isequal (k, [1 2])) +***** assert (isequal (rref(sym([2 1])), [1 sym(1)/2])) +***** assert (isequal (rref(sym([1 2; 2 4])), [1 2; 0 0])) +***** assert (isequal (rref(sym([0 0; 2 4])), [1 2; 0 0])) +***** test + A = sym([1 2 3; 2 3 4]); + [r, k] = rref(A); + assert (isequal (r, [1 0 -1; 0 1 2])) + assert (isequal (k, [1 2])); +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticK.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticK.m +***** error ellipticK (sym(1), 2) +***** assert (isequal (ellipticK (sym (0)), sym (pi)/2)) +***** assert (isequal (ellipticK (sym (-inf)), sym (0))) +***** assert (double (ellipticK (sym (1)/2)), 1.854074677, 10e-10) +***** assert (double (ellipticK (sym (pi)/4)), 2.225253684, 10e-10) +***** assert (double (ellipticK (sym (-55)/10)), 0.9324665884, 10e-11) +***** test + % compare to double ellipke + m = 1/5; + ms = sym(1)/5; + [K, E] = ellipke (m); + assert (double (ellipticK (ms)), K, -1e-15) + assert (double (ellipticE (ms)), E, -1e-15) +***** test + % compare to double ellipke + if (exist ('OCTAVE_VERSION', 'builtin')) + m = -10.3; + ms = -sym(103)/10; + [K, E] = ellipke (m); + assert (double (ellipticK (ms)), K, -1e-15) + assert (double (ellipticE (ms)), E, -1e-15) + end +***** test + % compare to Maple + us = vpa (ellipticK (sym (7)), 40); + % > evalf(EllipticK(sqrt(7)), 40); + maple = vpa ('0.6168027921799632674669917683443602673441', 40) - ... + vpa ('0.9114898734184488922164103102629560336918j', 40); + assert (abs (double (maple - us)), 0, 1e-39) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/ne.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ne.m +***** test + % simple + x = sym(1); y = sym(1); e = x ~= y; + assert (~logical (e)) + x = sym(1); y = sym(2); e = x ~= y; + assert (logical(e)) +***** test + % array -- array + syms x + a = sym([1 3 3 2*x]); + b = sym([2 x 3 10]); + e = a ~= b; + assert (isa (e, 'sym')) + assert (logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 3 ~= x)) + assert (~logical (e(3))) + assert (isa (e(4), 'sym')) + assert (isequal (e(4), 2*x ~= 10)) +***** test + % oo + syms oo x + e = oo ~= x; + assert (isa (e, 'sym')) + s = strtrim (disp (e, 'flat')); + % SymPy <= 0.7.6.x will be '!=', newer gives 'Ne', test both + assert (strcmp (s, 'oo != x') || strcmp (s, 'Ne(oo, x)')) +***** test + % nan + syms oo x + snan = sym(nan); + e = snan ~= sym(0); + assert (logical (e)) + e = snan ~= snan; + assert (logical (e)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/interval.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/interval.m +***** test + a = interval(sym(1), 2); + assert (isa (a, 'sym')) +***** test + % some set subtraction + a = interval(sym(0), 4); + b = interval(sym(0), 1); + c = interval(sym(1), 4, true); + q = a - b; + assert (isequal( q, c)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/ones.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ones.m +***** test + y = ones(sym(2)); + x = [1 1; 1 1]; + assert( isequal( y, sym(x))) +***** test + y = ones(sym(2), 1); + x = [1; 1]; + assert( isequal( y, sym(x))) +***** test + y = ones(sym(1), 2); + x = [1 1]; + assert( isequal( y, sym(x))) +***** assert( isa( ones(sym(2), 'double'), 'double')) +***** assert( isa( ones(3, sym(3), 'single') , 'single')) +***** assert( isa( ones(3, sym(3)), 'sym')) +***** assert( isa( ones(3, sym(3), 'sym'), 'sym')) +***** xtest + % Issue #13 + assert( isa( ones(3, 3, 'sym'), 'sym')) +!!!!! known failure +invalid data type specified +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/fliplr.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/fliplr.m +***** test + % simple + syms x + A = [x 2; sym(pi) x]; + B = [2 x; x sym(pi)]; + assert (isequal (fliplr(A), B)) +***** test + % simple, odd # cols + syms x + A = [x 2 sym(pi); x 1 2]; + B = [sym(pi) 2 x; 2 1 x]; + assert (isequal (fliplr(A), B)) +***** test + % scalar + syms x + assert (isequal (fliplr(x), x)) 3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/acsc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acsc.m -***** error acsc (sym(1), 2) -***** assert (isequaln (acsc (sym(nan)), sym(nan))) +[inst/@sym/asin.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/asin.m +***** error asin (sym(1), 2) +***** assert (isequaln (asin (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = acsc(x); - f2 = acsc(d); + f1 = asin(x); + f2 = asin(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = acsc(A); - f2 = acsc(D); + f1 = asin(A); + f2 = asin(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = acsc (d); - f = acsc (y); + A = asin (d); + f = asin (y); h = function_handle (f); B = h (d); assert (A, B, -eps) - end 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/factorial.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/factorial.m -***** error factorial (sym(1), 2) +[inst/@sym/isscalar.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isscalar.m +***** assert(isscalar(sym('x'))) +***** test + a = sym([1 2 3]); + assert(~isscalar(a)) +***** assert(~isscalar(sym([]))) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/nextprime.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/nextprime.m +***** assert (isequal (nextprime(sym(2)), 3)); +***** assert (isequal (nextprime(sym(18)), 19)); +***** assert (isequal (nextprime(sym([1 2 3])), [2 3 5])); +***** assert (isequal (nextprime(sym([-1 0])), [2 2])); +***** test + % result is a sym + p = nextprime(sym(2)); + assert (isa (p, 'sym')) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/asinh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/asinh.m +***** error asinh (sym(1), 2) +***** assert (isequaln (asinh (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = asinh(x); + f2 = asinh(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = asinh(A); + f2 = asinh(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = asinh (d); + f = asinh (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/besseljn.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besseljn.m +***** test + % roundtrip + syms x + A = double(besseljn(sym(2), sym(9))); + q = besseljn(sym(2), x); + h = function_handle(q); + B = h(9); + assert (abs (A - B) <= eps) +***** error jn(sym('x')) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/cosint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosint.m +***** error cosint (sym(1), 2) ***** xtest - assert (isequaln (factorial (sym(nan)), sym(nan))) + assert (isequaln (cosint (sym(nan)), sym(nan))) !!!!! known failure -assert (isequaln (factorial (sym (nan)), sym (nan))) failed +assert (isequaln (cosint (sym (nan)), sym (nan))) failed ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = factorial(x); - f2 = factorial(d); + f1 = cosint(x); + f2 = 0.3374039229009681346626; assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = factorial(A); - f2 = factorial(D); + f1 = cosint(A); + f2 = 0.3374039229009681346626; + f2 = [f2 f2; f2 f2]; assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = factorial (d); - f = factorial (y); + A = cosint (d); + f = cosint (y); h = function_handle (f); B = h (d); assert (A, B, -eps) + end 5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/not.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/not.m -***** shared t, f - t = sym(true); - f = sym(false); +[inst/@sym/plus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/plus.m ***** test - % simple - assert (isequal( ~t, f)) - assert (isequal( ~t, f)) + % basic addition + syms x + assert (isa (x+5, 'sym')) + assert (isa (5+x, 'sym')) + assert (isa (5+sym(4), 'sym')) + assert (isequal (5+sym(4), sym(9))) ***** test - % array - w = [t t f t]; - z = [f f t f]; - assert (isequal( ~w, z)) + % array addition + syms x + D = [0 1; 2 3]; + A = [sym(0) 1; sym(2) 3]; + DZ = D - D; + assert( isequal ( A + D , 2*D )) + assert( isequal ( D + A , 2*D )) + assert( isequal ( A + A , 2*D )) + assert( isequal ( A + 2 , D + 2 )) + assert( isequal ( 4 + A , 4 + D )) ***** test - % number - assert (isequal( ~sym(5), f)) - assert (isequal( ~sym(0), t)) + % ensure MatrixExpr can be manipulated somewhat + syms n m integer + A = sym('A', [n m]); + B = subs(A, [n m], [5 6]); + B = B + 1; + assert (isa (B, 'sym')) + C = B(1, 1); % currently makes a MatrixElement + C = C + 1; + assert (isa (C, 'sym')) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/tanh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/tanh.m +***** error tanh (sym(1), 2) +***** assert (isequaln (tanh (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - % output is sym - syms x - e = ~(x == 4); - assert (isa (e, 'sym')) - assert (strncmp (sympy(e), 'Unequality', 10)) + f1 = tanh(x); + f2 = tanh(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % output is sym even for scalar t/f (should match other bool fcns) - assert (isa (~t, 'sym')) + D = [d d; d d]; + A = [x x; x x]; + f1 = tanh(A); + f2 = tanh(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % symbol ineq - syms x - a = [t f x == 1 x ~= 2 x < 3 x <= 4 x > 5 x >= 6]; - b = [f t x ~= 1 x == 2 x >= 3 x > 4 x <= 5 x < 6]; - assert (isequal( ~a, b)) + % round trip + y = sym('y'); + A = tanh (d); + f = tanh (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/tan.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/tan.m +***** error tan (sym(1), 2) +***** assert (isequaln (tan (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = tan(x); + f2 = tan(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = tan(A); + f2 = tan(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = tan (d); + f = tan (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/times.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/times.m +***** test + % scalar syms x - y = ~x; - s = disp(y, 'flat'); - assert (strcmp (strtrim (s), '~x') || strcmpi (strtrim (s), 'Not(x)')) -***** error not (sym(1), 2) -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/asec.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/asec.m -***** error asec (sym(1), 2) -***** assert (isequaln (asec (sym(nan)), sym(nan))) + assert (isa (x.*2, 'sym')) + assert (isequal (x.*2, x*2)) + assert (isequal (2.*sym(3), sym(6))) + assert (isequal (sym(2).*3, sym(6))) +***** test + % matrix-matrix and matrix-scalar + D = [0 1; 2 3]; + A = sym(D); + assert (isequal ( 2.*A , 2*D )) + assert (isequal ( A.*2 , 2*D )) + assert (isequal ( A.*A , D.*D )) + assert (isequal ( A.*D , D.*D )) + assert (isequal ( D.*A , D.*D )) +***** test + % immutable test + A = sym([1 2]); + B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)]])'); + assert (isequal (A.*A, B.*B)) +***** test + % MatrixSymbol test + A = sym([1 2; 3 4]); + B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); + C = sym('MatrixSymbol("C", 2, 2)'); + assert (~ isempty (strfind (sympy (C.*C), 'Hadamard'))) + assert (~ isempty (strfind (sympy (A.*C), 'Hadamard'))) + assert (~ isempty (strfind (sympy (C.*A), 'Hadamard'))) + assert (~ isempty (strfind (sympy (B.*C), 'Hadamard'))) + assert (~ isempty (strfind (sympy (C.*B), 'Hadamard'))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/partfrac.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/partfrac.m +***** test + % basic + syms x y z + assert(logical( partfrac(y/(x + 2)/(x + 1),x) == -y/(x + 2) + y/(x + 1) )) + assert(logical( factor(partfrac(x^2/(x^2 - y^2),y)) == factor(x/(2*(x + y)) + x/(2*(x - y)) ))) + assert(logical( factor(partfrac(x^2/(x^2 - y^2),x)) == factor(-y/(2*(x + y)) + y/(2*(x - y)) + 1 ))) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/resize.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/resize.m +***** test + B = sym([1 0 0; 0 0 0]); + assert (isequal (resize (sym(1), 2, 3), B)) + assert (isequal (resize (sym(1), [2 3]), B)) +***** test + B = sym([1 0; 0 0]); + assert (isequal (resize (sym(1), 2), B)) +***** test + A = sym([pi 2; 3 4]); + assert (isequal (resize (A, 1), sym(pi))) +***** assert (isequal (size (resize (sym(1), 0, 0)), [0 0])) +***** assert (isequal (size (resize (sym(1), 6, 0)), [6 0])) +***** assert (isequal (size (resize (sym(1), 0, 3)), [0 3])) +***** error resize (sym(1)) +***** error resize (sym(1), 2, 3, 4) +***** error resize (sym(1), [2 3 4]) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/chol.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/chol.m +***** error chol (sym ([1 2; 3 4])); +***** error chol (sym ([1 2; 3 4; 5 6])); +***** test + A = chol(hilb(sym(2))); + B = [[1 0]; sym(1)/2 sqrt(sym(3))/6]; + assert( isequal( A, B )) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/sinhint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinhint.m +***** error sinhint (sym(1), 2) +***** xtest + assert (isequaln (sinhint (sym(nan)), sym(nan))) +!!!!! known failure +assert (isequaln (sinhint (sym (nan)), sym (nan))) failed ***** shared x, d - d = 2; - x = sym('2'); + d = 1; + x = sym('1'); ***** test - f1 = asec(x); - f2 = asec(d); + f1 = sinhint(x); + f2 = 1.057250875375728514572; assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = asec(A); - f2 = asec(D); + f1 = sinhint(A); + f2 = 1.057250875375728514572; + f2 = [f2 f2; f2 f2]; assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = asec (d); - f = asec (y); + A = sinhint (d); + f = sinhint (y); h = function_handle (f); B = h (d); assert (A, B, -eps) end +5 tests, 4 passed, 1 known failure, 0 skipped +[inst/@sym/zeros.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/zeros.m +***** test + y = zeros(sym(2)); + x = [0 0; 0 0]; + assert( isequal( y, sym(x))) +***** test + y = zeros(sym(2), 1); + x = [0; 0]; + assert( isequal( y, sym(x))) +***** test + y = zeros(sym(1), 2); + x = [0 0]; + assert( isequal( y, sym(x))) +***** assert( isa( zeros(sym(2), 'double'), 'double')) +***** assert( isa( zeros(3, sym(3), 'single') , 'single')) +***** assert( isa( zeros(3, sym(3)), 'sym')) +***** assert( isa( zeros(3, sym(3), 'sym'), 'sym')) +***** xtest + % Issue #13 + assert( isa( zeros(3, 3, 'sym'), 'sym')) +!!!!! known failure +invalid data type specified +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/limit.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/limit.m +***** error limit (sym(1), 2, 3, 4, 5) +***** shared x, oo + syms x + oo = sym(inf); +***** assert (isa (limit(x, x, pi), 'sym')) +***** assert (isequal (limit(x, x, pi), sym(pi))) +***** assert (isequal (limit(sin(x)/x, x, 0), 1)) +***** test + % left/right-hand limit + assert (isequal (limit(1/x, x, 0, 'right'), oo)) + assert (isequal (limit(1/x, x, 0), oo)) + assert (isequal (limit(1/x, x, 0, 'left'), -oo)) + assert (isequal (limit(1/x, x, oo), 0)) + assert (isequal (limit(sign(x), x, 0, 'left'), -1)) + assert (isequal (limit(sign(x), x, 0, 'right'), 1)) + assert (isequal (limit(sign(x), x, 0, '-'), -1)) + assert (isequal (limit(sign(x), x, 0, '+'), 1)) +***** test + % matrix + syms y + A = [x 1/x x*y]; + B = sym([3 sym(1)/3 3*y]); + assert (isequal (limit(A, x, 3), B)) +***** test + % omitting arguments + syms a + assert (isequal (limit(a), 0)) + assert (isequal (limit(a*x+a+2), a+2)) + assert (isequal (limit(a*x+a+2, 6), 7*a+2)) +***** test + % constants + assert (isequal (limit(sym(6)), 6)) + assert (isequal (limit(sym(6), 7), 6)) + assert (isequal (limit([sym(6) sym(2)], 7), [6 2])) +***** test + % double constant, with sym limit + a = limit (6, sym(0)); + assert (isa (a, 'sym')) + assert (isequal (a, sym(6))) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/inv.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/inv.m +***** test + % scalar + syms x + assert (isequal (inv(x), 1/x)) +***** test + % diagonal + syms x + A = [sym(1) 0; 0 x]; + B = [sym(1) 0; 0 1/x]; + assert (isequal (inv(A), B)) +***** test + % 2x2 inverse + A = [1 2; 3 4]; + assert (max (max (abs (double (inv (sym (A))) - inv(A)))) <= 3*eps) +***** error + syms a; + A = [a a; a a]; + inv(A) +***** error + syms a; + A = [a a]; + inv(A) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticCE.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCE.m +***** error ellipticCE (sym (1), 2) +***** assert (isequal (ellipticCE (sym (0)), sym (1))) +***** assert (isequal (ellipticCE (sym (1)), sym (pi)/2)) +***** assert (double (ellipticCE (sym (pi)/4)), 1.482786927, 10e-10) +***** assert (double (ellipticCE (sym (pi)/2)), 1.775344699, 10e-10) 5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/sym.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/sym.m @@ -6032,87 +8362,326 @@ s2 = 'Function(''FF'')(Symbol(''w''), pi)'; assert (strcmp (s1, s2)) 80 tests, 80 passed, 0 known failure, 0 skipped -[inst/@sym/isprime.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isprime.m -***** assert (isprime (sym(5))) -***** assert (~isprime (sym(4))) -***** assert (~isprime (sym(0))) -***** assert (~isprime (sym(1))) +[inst/@sym/not.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/not.m +***** shared t, f + t = sym(true); + f = sym(false); ***** test - a = [5 7 6; 1 2 337]; - assert (isequal (isprime (a), [true true false; false true true])) -***** assert (~isprime(sym(-4))) -***** assert (~isprime(sym(4i))) -***** assert (~isprime(sym(3)/5)) -***** error - isprime(sym('x')); -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/tand.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/tand.m -***** error tand (sym(1), 2) -***** assert (isequaln (tand (sym(nan)), sym(nan))) + % simple + assert (isequal( ~t, f)) + assert (isequal( ~t, f)) ***** test - f1 = tand (sym(1)); - f2 = tand (1); - assert (double (f1), f2, -eps) + % array + w = [t t f t]; + z = [f f t f]; + assert (isequal( ~w, z)) ***** test - D = [10 30; 110 -45]; - A = sym(D); - f1 = tand (A); - f2 = tand (D); - assert (double (f1), f2, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/subsindex.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/subsindex.m + % number + assert (isequal( ~sym(5), f)) + assert (isequal( ~sym(0), t)) ***** test - i = sym(1); - a = 7; - assert(a(i)==a); - i = sym(2); - a = 2:2:10; - assert(a(i)==4); + % output is sym + syms x + e = ~(x == 4); + assert (isa (e, 'sym')) + assert (strncmp (sympy(e), 'Unequality', 10)) ***** test - i = sym([1 3 5]); - a = 1:10; - assert( isequal (a(i), [1 3 5])) + % output is sym even for scalar t/f (should match other bool fcns) + assert (isa (~t, 'sym')) ***** test - i = sym([1 3 5]); - a = sym(1:10); - assert( isequal (a(i), sym([1 3 5]))); + % symbol ineq + syms x + a = [t f x == 1 x ~= 2 x < 3 x <= 4 x > 5 x >= 6]; + b = [f t x ~= 1 x == 2 x >= 3 x > 4 x <= 5 x < 6]; + assert (isequal( ~a, b)) ***** test - % should be an error if it doesn't convert to double syms x - a = 1:10; - try - a(x) - waserr = false; - catch - waserr = true; - end - assert(waserr) + y = ~x; + s = disp(y, 'flat'); + assert (strcmp (strtrim (s), '~x') || strcmpi (strtrim (s), 'Not(x)')) +***** error not (sym(1), 2) +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/cosh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosh.m +***** error cosh (sym(1), 2) +***** assert (isequaln (cosh (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = cosh(x); + f2 = cosh(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = cosh(A); + f2 = cosh(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = cosh (d); + f = cosh (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ifourier.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ifourier.m +***** error ifourier (sym(1), 2, 3, 4) +***** test + % matlab SMT compat + syms t r u x w + Pi=sym('pi'); + assert(logical( ifourier(exp(-abs(w))) == 1/(Pi*(x^2 + 1)) )) + assert(logical( ifourier(exp(-abs(x))) == 1/(Pi*(t^2 + 1)) )) + assert(logical( ifourier(exp(-abs(r)),u) == 1/(Pi*(u^2 + 1)) )) + assert(logical( ifourier(exp(-abs(r)),r,u) == 1/(Pi*(u^2 + 1)) )) +***** test + % basic + syms x w + Pi=sym('pi'); + assert(logical( ifourier(exp(-w^2/4)) == 1/(sqrt(Pi)*exp(x^2)) )) + assert(logical( ifourier(sqrt(Pi)/exp(w^2/4)) == exp(-x^2) )) +***** test + % Dirac delta tests + syms x w + Pi=sym('pi'); + assert(logical( ifourier(dirac(w-2)) == exp(2*1i*x)/(2*Pi) )) + assert (logical( ifourier(sym(2), w, x) == 2*dirac(x) )) +***** test + % advanced test + syms x w c d + Pi=sym('pi'); + f=(Pi*(dirac(x-c)+dirac(x+c))+2*Pi*1i*(-dirac(x+3*d)+dirac(x-3*d))+2/(x^2+1))/(2*Pi); + assert(logical( simplify(ifourier(cos(c*w)+2*sin(3*d*w)+exp(-abs(w)))-f) == 0 )) +***** xtest + % Inverse Fourier transform cannot recover non-smooth functions + % SymPy cannot evaluate correctly?? + syms x w + assert(logical( ifourier(2/(w^2 + 1)) == exp(-abs(x)) )) + assert(logical( ifourier(2/(w^2 + 1)) == heaviside(x)/exp(x) + heaviside(-x)*exp(x) )) + assert(logical( ifourier(-(w*4)/(w^4 + 2*w^2 + 1) )== -x*exp(-abs(x))*1i )) + assert(logical( ifourier(-(w*4)/(w^4 + 2*w^2 + 1) )== -x*(heaviside(x)/exp(x) + heaviside(-x)*exp(x))*1i )) +!!!!! known failure +assert (logical (ifourier (2 / (w ^ 2 + 1)) == exp (-abs (x)))) failed +***** error ifourier (sym('k', 'positive')*sym('k')) +***** test + % SMT compact, prefers k over symvar + syms k x y + assert (isequal (ifourier(y*exp(-k^2/4)), y/sqrt(sym(pi))*exp(-x^2))) +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/signIm.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/signIm.m +***** assert (isequal (signIm (sym(1)), sym(0))) +***** assert (isequal (signIm (sym(1) + 2i), sym(1))) +***** assert (isequal (signIm (sym(1) - 2i), sym(-1))) +***** test + % intermediate A looks bit weird, but it works + syms z + A = signIm (z); + assert (isequal (subs(A, z, 3+sym(4i)), sym(1))) + assert (isequal (subs(A, z, 3-sym(4i)), sym(-1))) +***** test + % really a @sym/sign test, but that one is autogen + z = 3 + sym(4i); + A = sign (z); + B = z / abs(z); + assert (double (A), double (B), eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ilaplace.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ilaplace.m +***** error ilaplace (sym(1), 2, 3, 4) +***** test + % basic SMT compact: no heaviside + syms s + syms t positive + assert (isequal (ilaplace(1/s^2), t)) + assert (isequal (ilaplace(s/(s^2+9)), cos(3*t))) + assert (isequal (ilaplace(6/s^4), t^3)) +***** test + % more SMT compact + syms r + syms u positive + assert (isequal (ilaplace(1/r^2, u), u)) + assert (isequal (ilaplace(1/r^2, r, u), u)) +***** test + % if t specified and not positive, we expect heaviside + clear s t + syms s t + assert (isequal (ilaplace(1/s^2, s, t), t*heaviside(t))) + assert (isequal (ilaplace(s/(s^2+9), t), cos(3*t)*heaviside(t))) + assert (isequal (ilaplace(6/s^4, t), t^3*heaviside(t))) +***** test + % Heaviside test + syms s + t=sym('t', 'positive'); + assert(logical( ilaplace(exp(-5*s)/s^2,t) == (t-5)*heaviside(t-5) )) +***** test + % Delta dirac test + syms s + t = sym('t'); + assert (isequal (ilaplace (sym('2'), t), 2*dirac(t))) +***** test + % Delta dirac test 2 + syms s c + t = sym('t', 'positive'); + assert (isequal (ilaplace (5*exp(-3*s) + 2*exp(c*s) - 2*exp(-2*s)/s,t), ... + 5*dirac(t-3) + 2*dirac(c+t) - 2*heaviside(t-2))) +***** error ilaplace (sym('s', 'positive')*sym('s')) +***** test + % SMT compact, prefers s over symvar + syms s x + syms t positive + assert (isequal (ilaplace(x/s^4), x*t^3/6)) + t = sym('t'); + assert (isequal (ilaplace(x/s^4, t), x*t^3/6*heaviside(t))) +***** test + % pick s even it has assumptions + syms s real + syms x t + assert (isequal (ilaplace (x/s^2, t), x*t*heaviside(t))) +10 tests, 10 passed, 0 known failure, 0 skipped +[inst/@sym/toeplitz.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/toeplitz.m +***** test + % rect + R = [10 20 40]; C = [10 30]; + A = sym(toeplitz(R,C)); + B = toeplitz(sym(R),sym(C)); + assert (isequal (A, B)) + R = [10 20]; C = [10 30 50]; + A = sym(toeplitz(R,C)); + B = toeplitz(sym(R),sym(C)); + assert (isequal (A, B)) +***** test + % symbols + syms x y + R = [10 20 40]; C = [10 30]; + Rs = [10 x 40]; Cs = [10 y]; + A = toeplitz(R,C); + B = toeplitz(Rs,Cs); + assert (isequal (A, subs(B,[x,y],[20 30]))) ***** test + % hermitian + syms a b c + A = [a b c; conj(b) a b; conj(c) conj(b) a]; + B = toeplitz([a,b,c]); + assert (isequal( A, B)) +***** warning + % mismatch syms x - assert (isequal (x(sym (true)), x)) - assert (isequal (x(sym (false)), sym ([]))) + B = toeplitz([10 x], [1 3 x]); +***** warning + % scalar + B = toeplitz(sym(2), 3); + assert (isequal (B, sym(2))) ***** test - x = 6; - assert (isequal (x(sym (true)), 6)) - assert (isequal (x(sym (false)), [])) + % mismatch + syms x y + fprintf('\n one warning expected\n') % how to quiet this one? + A = toeplitz([10 2], [1 3 5]); + s = warning ('off', 'OctSymPy:toeplitz:diagconflict'); + B = toeplitz([10 x], [1 3 y]); + warning(s) + assert (isequal (A, subs(B, [x,y], [2 5]))) + + one warning expected +warning: toeplitz: column wins diagonal conflict +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/tril.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/tril.m ***** test - a = sym([10 12 14]); - assert (isequal (a(sym ([true false true])), a([1 3]))) - assert (isequal (a(sym ([false false false])), sym (ones(1,0)))) + syms x + assert (isequal (tril(x), x)) ***** test - a = [10 11; 12 13]; - p = [true false; true true]; - assert (isequal (a(sym (p)), a(p))) - p = [false false false]; - assert (isequal (a(sym (p)), a(p))) -***** error - a = [10 12]; - I = [sym(true) 2]; - b = a(I); -9 tests, 9 passed, 0 known failure, 0 skipped + % with symbols + syms x + A = [x 2*x; 3*x 4*x]; + assert (isequal (tril(A), [x 0; 3*x 4*x])) +***** test + % diagonal shifts + B = round(10*rand(3,4)); + A = sym(B); + assert (isequal (tril(A), tril(B))) + assert (isequal (tril(A,0), tril(B,0))) + assert (isequal (tril(A,1), tril(B,1))) + assert (isequal (tril(A,-1), tril(B,-1))) +***** test + % double array pass through + B = round(10*rand(3,4)); + assert (isequal (tril(B,sym(1)), tril(B,1))) + assert (isa (tril(B,sym(1)), 'double')) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/ipermute.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ipermute.m +***** error permute (sym(1)) +***** test + syms x + A = [1 x]; + perm = [2 1]; + B = permute(A, perm); + C = ipermute(B, perm); + assert (isequal(C, A)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/jacobian.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/jacobian.m +***** shared x,y,z + syms x y z +***** test + % 1D + f = x^2; + assert (isequal (jacobian(f), diff(f,x))) + assert (isequal (jacobian(f,{x}), diff(f,x))) + assert (isequal (jacobian(f,x), diff(f,x))) +***** test + % const + f = sym(1); + g = sym(0); + assert (isequal (jacobian(f), g)) + assert (isequal (jacobian(f,x), g)) +***** test + % double const + f = 1; + g = sym(0); + assert (isequal (jacobian(f,x), g)) +***** test + % diag + f = [x y^2]; + g = [sym(1) 0; 0 2*y]; + assert (isequal (jacobian(f), g)) + assert (isequal (jacobian(f, [x y]), g)) + assert (isequal (jacobian(f, {x y}), g)) +***** test + % anti-diag + f = [y^2 x]; + g = [0 2*y; sym(1) 0]; + assert (isequal (jacobian(f), g)) + assert (isequal (jacobian(f, {x y}), g)) +***** test + % shape + f = [x y^2]; + assert (isequal (size(jacobian(f, {x y z})), [2 3])) + assert (isequal (size(jacobian(f, [x y z])), [2 3])) + assert (isequal (size(jacobian(f, [x; y; z])), [2 3])) + assert (isequal (size(jacobian(f.', {x y z})), [2 3])) +***** test + % scalar f + f = x*y; + assert (isequal (size(jacobian(f, {x y})), [1 2])) + g = gradient(f, {x y}); + assert (isequal (jacobian(f, {x y}), g.')) +***** test + % vect f wrt 1 var + f = [x x^2]; + assert (isequal (size(jacobian(f, x)), [2 1])) + f = f.'; % same shape output + assert (isequal (size(jacobian(f, x)), [2 1])) +***** error jacobian([sym(1) 2; sym(3) 4]) +***** error jacobian(sym(1), 2, 3) +10 tests, 10 passed, 0 known failure, 0 skipped [inst/@sym/isna.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/isna.m ***** test @@ -6124,713 +8693,677 @@ assert (~isna(sym(nan))) assert (isequal (isna (sym ([1 nan])), [false false])) 1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/sympy.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sympy.m -***** assert (strcmp (sympy (sym(pi)), 'pi')) -***** assert (strcmp (sympy (sym(1)), 'Integer(1)')) -***** assert (strcmp (sympy (sym(2)/3), 'Rational(2, 3)')) -***** assert (strcmp (sympy (sym('x')), 'Symbol(''x'')')) -***** test - x = sym('x'); - assert (isequal (sym(sympy(x)), x)) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticF.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticF.m -***** error ellipticF (sym(1)) -***** error ellipticF (sym(1), 2, 3) -***** assert (double (ellipticF (sym (pi)/3, sym (-105)/10)), 0.6184459461, 10e-11) -***** assert (double (ellipticF (sym (pi)/4, sym (-pi))), 0.6485970495, 10e-11) -***** assert (double (ellipticF (sym (1), sym (-1))), 0.8963937895, 10e-11) -***** assert (double (ellipticF (sym (pi)/6, sym (0))), 0.5235987756, 10e-11) +[inst/@sym/taylor.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/taylor.m ***** test - % compare to Maple - us = vpa (ellipticF (sym(11)/10, sym(9)/4), 40); - % > evalf(EllipticF(sin(11/10), sqrt(9/4)), 40); - maple = vpa ('1.206444996991058996424988192917728014427', 40) - ... - vpa ('0.8157358125823472313001683083685348517476j', 40); - assert (abs (double (maple - us)), 0, 1e-39) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/factor.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/factor.m + syms x + f = exp(x); + expected = 1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120; + assert (isequal (taylor(f), expected)) + assert (isequal (taylor(f,x), expected)) + assert (isequal (taylor(f,x,0), expected)) ***** test - % n = 152862; - % [p,m] = factor(n); % only works on Octave, no Matlab as of 2014a - n = 330; % so we use an output without repeated factors - p = factor(n); m = ones(size(p)); - [ps,ms] = factor(sym(n)); - assert (isequal (p, ps)) - assert (isequal (m, ms)) + syms x + f = exp(x); + expected = 1 + x + x^2/2 + x^3/6 + x^4/24; + assert (isequal (taylor(f,'order',5), expected)) + assert (isequal (taylor(f,x,'order',5), expected)) + assert (isequal (taylor(f,x,0,'order',5), expected)) ***** test - n = sym(2)^4*13; - [p,m] = factor(n); - assert (isequal (p, [2 13])) - assert (isequal (m, [4 1])) -***** test syms x - assert( logical (factor(x^2 + 6*x + 5) == (x+5)*(x+1))) + % key/value ordering doesn't matter + syms x + f = exp(x); + g1 = taylor(f, 'expansionPoint', 1, 'order', 3); + g2 = taylor(f, 'order', 3, 'expansionPoint', 1); + assert (isequal (g1, g2)) ***** test syms x - f = [ x^4/2 + 5*x^3/12 - x^2/3 x^2 - 1 10]; - g = [ x^2*(2*x - 1)*(3*x + 4)/12 (x+1)*(x-1) 10]; - assert (isequal (factor(f), g)) + f = x^2; + assert (isequal (taylor(f,x,0,'order',0), 0)) + assert (isequal (taylor(f,x,0,'order',1), 0)) + assert (isequal (taylor(f,x,0,'order',2), 0)) + assert (isequal (taylor(f,x,0,'order',3), x^2)) + assert (isequal (taylor(f,x,0,'order',4), x^2)) ***** test - % "fragile form" works - A = factor(sym(124)); - B = strtrim(disp(A, 'flat')); - assert (strcmp (B, '2**2*31**1')) -***** error [p, m] = factor(sym('x')); -***** error [p, m] = factor(sym(42), sym('x')); + syms x y + f = exp(x)+exp(y); + expected = 2 + x + x^2/2 + x^3/6 + x^4/24 + y + y^2/2 + y^3/6 + y^4/24; + assert (isAlways(taylor(f,[x,y],'order',5)== expected)) + assert (isAlways(taylor(f,[x,y],[0,0],'order',5) == expected)) ***** test - % if polynomial happens to be a constant, don't attempt integer - % factorization if a variable is specified - f = sym(42); - q = factor(f, sym('x')); - assert (isequal (f, q)); -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/mod.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/mod.m -***** error mod (sym(1), 2, 3 ,4) -***** assert (isequal (mod (sym(5), 4), sym(1))) -***** assert (isequal (mod ([sym(5) 8], 4), [1 0] )) -***** assert (isequal (mod (sym(5), [2 3]), [1 2] )) -***** assert (isequal (mod ([sym(5) sym(6)], [2 3]), [1 0] )) + % key/value ordering doesn't matter + syms x + f = exp(x); + g1 = taylor(f, 'expansionPoint', 1, 'order', 3); + g2 = taylor(f, 'order', 3, 'expansionPoint', 1); + assert (isequal (g1, g2)) ***** test syms x - assert (isequal ( mod (5*x, 3), 2*x )) + f = x^2; + assert (isequal (taylor(f,x,0,'order',0), 0)) + assert (isequal (taylor(f,x,0,'order',1), 0)) + assert (isequal (taylor(f,x,0,'order',2), 0)) + assert (isequal (taylor(f,x,0,'order',3), x^2)) + assert (isequal (taylor(f,x,0,'order',4), x^2)) ***** test + % syms for a and order syms x - a = [7*x^2 + 3*x + 3 3*x; 13*x^4 6*x]; - assert (isequal ( mod (a,3), [x^2 0; x^4 0] )) + f = x^2; + assert (isequal (taylor(f,x,sym(0),'order',sym(2)), 0)) + assert (isequal (taylor(f,x,sym(0),'order',sym(4)), x^2)) ***** test - % vector of polys with mix of vars: symvar on each syms x y - a = [6*x 7*y]; - b = mod(a, 4); - c = [2*x 3*y]; - assert (isequal (b, c)) + f = exp (x^2 + y^2); + expected = 1+ x^2 +y^2 + x^4/2 + x^2*y^2 + y^4/2; + assert (isAlways(taylor(f,[x,y],'order',5)== expected)) + assert (isAlways(taylor(f,[x,y],'expansionPoint', [0,0],'order',5) == expected)) ***** test - % coeff has variable - syms x - n = sym('n', 'integer'); - p = (3*n + 2)*x; - q = mod(p, 3); - assert (isequal (q, 2*x)) + syms x y + f = sqrt(1+x^2+y^2); + expected = 1+ x^2/2 +y^2/2 - x^4/8 - x^2*y^2/4 - y^4/8; + assert (isAlways(taylor(f,[x,y],'order',6)== expected)) + assert (isAlways(taylor(f,[x,y],'expansionPoint', [0,0],'order',5) == expected)) ***** test - % coeff has variable + syms x y + f = sin (x^2 + y^2); + expected = sin(sym(1))+2*cos(sym(1))*(x-1)+(cos(sym(1))-2*sin(sym(1)))*(x-1)^2 + cos(sym(1))*y^2; + assert (isAlways(taylor(f,[x,y],'expansionPoint', [1,0],'order',3) == expected)) +***** test + % key/value ordering doesn't matter + syms x y + f = exp(x+y); + g1 = taylor(f, 'expansionPoint',1, 'order', 3); + g2 = taylor(f, 'order', 3, 'expansionPoint',1); + assert (isAlways(g1== g2)) +***** test + syms x y + f = x^2 + y^2; + assert (isAlways(taylor(f,[x,y],[0,0],'order',0)== sym(0) )) + assert (isAlways(taylor(f,[x,y],[0,0],'order',1)== sym(0) )) + assert (isAlways(taylor(f,[x,y],[0,0],'order',2)== sym(0) )) + assert (isAlways(taylor(f,[x,y],[0,0],'order',3)== sym(x^2 + y^2))) + assert (isAlways(taylor(f,[x,y],[0,0],'order',4)== sym(x^2 + y^2))) +***** test + % expansion point syms x a - p = a*x; - q = mod(p, 3); - q = children(q); - q = q(2); % order might be fragile! - w = subs(q, a, 5); - assert (isequal (w, 2)) + f = x^2; + g = taylor(f,x,2); + assert (isequal (simplify(g), f)) + assert (isequal (g, 4*x+(x-2)^2-4)) + g = taylor(f,x,a); + assert (isequal (simplify(g), f)) ***** test - % different modulo + % wrong order-1 series with nonzero expansion pt: + % upstream bug https://github.com/sympy/sympy/issues/9351 + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x + g = x^2 + 2*x + 3; + h = taylor (g, x, 4, 'order', 1); + assert (isequal (h, 27)) + end +***** test + syms x y z + g = x^2 + 2*y + 3*z; + h = taylor (g, [x,y,z], 'order', 4); + assert (isAlways(h == g)) ; +***** test + syms x y z + g = sin(x*y*z); + h = taylor (g, [x,y,z], 'order', 4); + assert (isAlways(h == x*y*z)) ; +***** error syms x y - q = mod([5*x + 10 5*y + 10], [2 3]); - assert (isequal (q, [x 2*y + 1])) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/zeros.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/zeros.m + taylor(0, [x, y], [1, 2, 3]); +18 tests, 18 passed, 0 known failure, 0 skipped +[inst/@sym/lu.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/lu.m ***** test - y = zeros(sym(2)); - x = [0 0; 0 0]; - assert( isequal( y, sym(x))) + % scalar + [l, u, p] = lu(sym(6)); + assert (isequal (l, sym(1))) + assert (isequal (u, sym(6))) + assert (isequal (p, sym(1))) + syms x + [l, u, p] = lu(x); + assert (isequal (l*u, p*x)) + [l, u] = lu(x); + assert (isequal (l*u, x)) ***** test - y = zeros(sym(2), 1); - x = [0; 0]; - assert( isequal( y, sym(x))) + % perm + A = sym(fliplr(2*eye(3))); + [L, U, P] = lu(A); + assert (isequal (L*U, P*A)) + [L, U, P] = lu(A, 'matrix'); + assert (isequal (L*U, P*A)) + [L, U, p] = lu(A, 'vector'); + assert (isequal (L*U, A(p,:))) + [L, U] = lu(A); + assert (isequal (L*U, A)) ***** test - y = zeros(sym(1), 2); - x = [0 0]; - assert( isequal( y, sym(x))) -***** assert( isa( zeros(sym(2), 'double'), 'double')) -***** assert( isa( zeros(3, sym(3), 'single') , 'single')) -***** assert( isa( zeros(3, sym(3)), 'sym')) -***** assert( isa( zeros(3, sym(3), 'sym'), 'sym')) -***** xtest - % Issue #13 - assert( isa( zeros(3, 3, 'sym'), 'sym')) -!!!!! known failure -invalid data type specified -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/erfcinv.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfcinv.m -***** error erfcinv (sym(1), 2) -***** assert (isequaln (erfcinv (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); + % p is col vectpr + A = sym([0 2; 3 4]); + [L, U, p] = lu(A, 'vector'); + assert(iscolumn(p)) ***** test - f1 = erfcinv(x); - f2 = erfcinv(d); - assert( abs(double(f1) - f2) < 1e-15 ) + % simple matrix + A = [1 2; 3 4]; + B = sym(A); + [L, U, P] = lu(B); + assert (isequal (L*U, P*A)) + assert (isequal (U(2,1), sym(0))) + % needs pivot + A = [0 2; 3 4]; + B = sym(A); + [L, U, P] = lu(B); + [Ld, Ud, Pd] = lu(A); + assert (isequal (L*U, P*A)) + assert (isequal (U(2,1), sym(0))) + % matches regular LU + assert ( max(max(double(L)-Ld)) <= 10*eps) + assert ( max(max(double(U)-Ud)) <= 10*eps) + assert ( isequal (P, Pd)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/hessian.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/hessian.m +***** shared x,y,z + syms x y z ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = erfcinv(A); - f2 = erfcinv(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % 1D + f = x^2; + assert (isequal (hessian(f), diff(f,x,x))) + assert (isequal (hessian(f,{x}), diff(f,x,x))) + assert (isequal (hessian(f,x), diff(f,x,x))) ***** test - % round trip - y = sym('y'); - A = erfcinv (d); - f = erfcinv (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticK.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticK.m -***** error ellipticK (sym(1), 2) -***** assert (isequal (ellipticK (sym (0)), sym (pi)/2)) -***** assert (isequal (ellipticK (sym (-inf)), sym (0))) -***** assert (double (ellipticK (sym (1)/2)), 1.854074677, 10e-10) -***** assert (double (ellipticK (sym (pi)/4)), 2.225253684, 10e-10) -***** assert (double (ellipticK (sym (-55)/10)), 0.9324665884, 10e-11) + % const + f = sym(1); + g = sym(0); + assert (isequal (hessian(f), g)) + assert (isequal (hessian(f,x), g)) ***** test - % compare to double ellipke - m = 1/5; - ms = sym(1)/5; - [K, E] = ellipke (m); - assert (double (ellipticK (ms)), K, -1e-15) - assert (double (ellipticE (ms)), E, -1e-15) + % double const + f = 1; + g = sym(0); + assert (isequal (hessian(f,x), g)) ***** test - % compare to double ellipke - if (exist ('OCTAVE_VERSION', 'builtin')) - m = -10.3; - ms = -sym(103)/10; - [K, E] = ellipke (m); - assert (double (ellipticK (ms)), K, -1e-15) - assert (double (ellipticE (ms)), E, -1e-15) - end + % linear + f = 42*x; + g = sym(0); + assert (isequal (hessian(f), g)) + assert (isequal (hessian(f,x), g)) ***** test - % compare to Maple - us = vpa (ellipticK (sym (7)), 40); - % > evalf(EllipticK(sqrt(7)), 40); - maple = vpa ('0.6168027921799632674669917683443602673441', 40) - ... - vpa ('0.9114898734184488922164103102629560336918j', 40); - assert (abs (double (maple - us)), 0, 1e-39) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/isAlways.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isAlways.m + % linear + f = 42*x - sym('a')*y; + g = [0 0; 0 0]; + assert (isequal (hessian(f, {x y}), g)) ***** test - % basics - assert(isAlways(true)) - assert(isAlways(1==1)) - assert(isAlways(sym(1)==sym(1))) - assert(isAlways(sym(1)==1)) + % 2d + f = x*cos(y); + g = [0 -sin(y); -sin(y) -f]; + assert (isequal (hessian(f), g)) + assert (isequal (hessian(f, {x y}), g)) +***** test + % 3d + f = x*cos(z); + Hexp = [0 0 -sin(z); sym(0) 0 0; -sin(z) 0 -f]; + H = hessian(f, {x y z}); + assert (isequal (H, Hexp)) +***** error hessian([sym(1) sym(2)]) +***** error hessian(sym(1), 2, 3) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/numdem.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/numdem.m +***** error numdem (sym(1), 2) ***** test - % numbers to logic? - assert (isAlways(sym(1))) - assert (isAlways(sym(-1))) - assert (~isAlways(sym(0))) -***** shared x syms x + [n, d] = numdem(1/x); + assert (isequal (n, sym(1)) && isequal (d, x)) ***** test - % in this case it is boolean - expr = x - x == 0; - assert (logical(expr)) - assert (isAlways(expr)) - % and both are logical type - assert (islogical(logical(expr))) - assert (islogical(isAlways(expr))) + syms x y + n1 = [sym(1); x]; + d1 = [x; y]; + [n, d] = numdem(n1 ./ d1); + assert (isequal (n, n1) && isequal (d, d1)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/euler.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/euler.m +***** error euler (sym(1), 2, 3) +***** assert (isequal (euler (sym(0)), sym(1))) ***** test - % structurally same and mathematically true - % (here expr should be sym, non-boolean) - expr = x == x; - assert (logical(expr)) - assert (isAlways(expr)) - %assert (~islogical(expr)) % FIXME: Issue #56 - %assert (isa(expr, 'sym)) + m = sym([0 1 2; 8 10 888889]); + A = euler (m); + B = sym([1 0 -1; 1385 -50521 0]); + assert (isequal (A, B)) ***** test - % structurally same and mathematically true - % (here expr should be sym, non-boolean) - expr = 1 + x == x + 1; - assert (logical(expr)) - assert (isAlways(expr)) + if (python_cmd('return Version(spver) > Version("1.1.1")')) + syms x + assert (isequal (euler(6, x), x^6 - 3*x^5 + 5*x^3 - 3*x)) + end ***** test - % non-zero numbers are true - assert (isAlways(sym(1))) - assert (isAlways(sym(-10))) - assert (~isAlways(sym(0))) -***** shared x, y + if (python_cmd('return Version(spver) > Version("1.1.1")')) + assert (isnan (euler (3, sym(nan)))) + end +***** test + if (python_cmd('return Version(spver) > Version("1.1.1")')) + syms m x + em = euler (m, x); + A = subs(em, [m x], [2 sym(pi)]); + assert (isequal (A, sym(pi)^2 - sym(pi))) + end +***** test + % vectorized + if (python_cmd('return Version(spver) > Version("1.1.1")')) syms x y + A = euler([1; 2], [x; y]); + B = [x - sym(1)/2; y^2 - y]; + assert (isequal (A, B)) + end ***** test - % structurally same and mathematically true - % (here expr should be sym, non-boolean) - expr = x*(1+y) == x*(y+1); - assert (logical(expr)) - assert (isAlways(expr)) - assert (islogical(isAlways(expr))) + % round trip + if (python_cmd('return Version(spver) > Version("1.1.1")')) + syms m z + f = euler (m, z); + h = function_handle (f, 'vars', [m z]); + A = h (2, 2.2); + B = euler (2, 2.2); + assert (A, B) + end ***** test - % Now for some differences - % simplest example from SymPy FAQ - expr = x*(1+y) == x+x*y; - assert (~logical(expr)) - assert (isAlways(expr)) + % compare vpa to maple: Digits:=34; evalf(euler(13, exp(1)+Pi*I/13)); + if (python_cmd('return Version(spver) > Version("1.1.1")')) + A = vpa('1623.14184180556920918624604530515') + ... + vpa('4270.98066989140286451493108809574')*1i; + z = vpa (exp(1), 32) + vpa(pi, 32)/13*1i; + B = euler (13, z); + relerr = double(abs((B - A)/A)); + assert (abs(relerr) < 2e-31); + end +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/rank.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rank.m ***** test - % more differences 1, these don't simplify in sympy (as of 2016-01) - expr = (x+1)^2 == x*x + 2*x + 1; - assert (~logical(expr)) - assert (isAlways(expr)) + A = sym([1 2; 3 4]); + assert (rank(A) == 2); ***** test - % more differences 2 - expr = sin(2*x) == 2*sin(x)*cos(x); - assert (~logical(expr)) - assert (isAlways(expr)) + A = sym([1 2 3; 3 4 5]); + assert (rank(A) == 2); ***** test - % more differences 3, false - expr = x*(x+y) == x^2 + x*y + 1; - assert (~logical(expr)) - assert (~isAlways(expr)) - assert (~isAlways(expr, 'unknown', 'error')) + A = sym([1 2; 1 2]); + assert (rank(A) == 1); ***** test - % logically not equal, math equal - exprn = x*(x+y) ~= x^2 + x*y; - assert (logical(exprn)) - assert (~isAlways(exprn)) + A = sym([1 2; 3 4]); + assert (rank(A) == 2); +***** assert (rank(sym(1)) == 1); +***** assert (rank(sym(0)) == 0); +***** assert (rank(sym('x', 'positive')) == 1); +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/mtimes.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/mtimes.m ***** test - % logically not equal, math not equal - exprn = x*(x+y) ~= x^2 + x*y + 1; - assert (logical(exprn)) - assert (isAlways(exprn)) + % scalar + syms x + assert (isa (x*2, 'sym')) + assert (isequal (2*sym(3), sym(6))) + assert (isequal (sym(2)*3, sym(6))) ***** test - % equal and not equal - e1 = sin(x)^2 + cos(x)^2 == 1; - e2 = sin(x)^2 + cos(x)^2 == 2; - assert (~logical(e1)) - assert (isAlways(e1)) - assert (~logical(e2)) - assert (~isAlways(e2)) - assert (~isAlways(e2, 'unknown', 'error')) -***** error isAlways(x, 'unknown', 'kevin') -***** error isAlways(x, 'unknown') -***** error isAlways(x, 'kevin', 'true') -***** error - a = [x*(x+y)==x^2+x*y x==y]; - b = isAlways(a, 'unknown', 'error'); -***** error - a = x==y; - b = isAlways(a, 'unknown', 'error'); + % matrix-scalar + D = [0 1; 2 3]; + A = sym(D); + assert (isa (2*A, 'sym')) + assert (isequal ( 2*A , 2*D )) + assert (isequal ( A*2 , 2*D )) ***** test - % array, unknown keyword - a = [x==x x==x+1 x==y x*(x+y)==x^2+x*y cos(x)^2+sin(x)^2==2]; - b = isAlways(a, 'unknown', false); - c = isAlways(a, 'unknown', 'false'); - expect = [true false false true false]; - assert (islogical(b)) - assert (isequal (b, expect)) - assert (isequal (c, expect)) - b = isAlways(a, 'unknown', true); - c = isAlways(a, 'unknown', 'true'); - expect = [true false true true false]; - assert (islogical(b)) - assert (isequal (b, expect)) - assert (isequal (c, expect)) + % matrix-matrix + D = [0 1; 2 3]; + A = sym(D); + assert (isa (A*A, 'sym')) + assert (isequal ( A*A , D*D )) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/polylog.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/polylog.m +***** assert (isequal (polylog (sym('s'), 0), sym(0))) ***** test - % ineq - e = x*(x+y) >= x^2 + x*y + 1; - assert (~logical(e)) - assert (isAlways(e)) - e = x*(x+y) <= x^2 + x*y; - assert (~logical(e)) - assert (isAlways(e)) -21 tests, 21 passed, 0 known failure, 0 skipped -[inst/@sym/sinint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinint.m -***** error sinint (sym(1), 2) -***** xtest - assert (isequaln (sinint (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (sinint (sym (nan)), sym (nan))) failed + if (python_cmd ('return Version(spver) > Version("1.0")')) + assert (isequal (double (polylog (1, sym(-1))), -log(2))) + end +***** assert (isequal (double (polylog (0, sym(2))), -2)) +***** assert (isequal (double (polylog (-1, sym(2))), 2)) +***** assert (isequal (double (polylog (-2, sym(3))), -1.5)) +***** assert (isequal (double (polylog (-3, sym(2))), 26)) +***** assert (isequal (double (polylog (-4, sym(3))), -15)) +***** assert (isequal (double (polylog (1, sym(1)/2)), log(2))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms s z + f = polylog (s, z); + h = function_handle (f, 'vars', [s z]); + A = h (1.1, 2.2); + B = polylog (1.1, 2.2); + assert (A, B) + end +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/le.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/le.m +***** test + % simple + x = sym(1); y = sym(1); e = x <= y; + assert (logical (e)) + x = sym(1); y = sym(2); e = x <= y; + assert (logical (e)) +***** test + % array -- array + syms x + a = sym([1 3 3 2*x]); + b = sym([2 x 3 10]); + e = a <= b; + assert (isa (e, 'sym')) + assert (logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 3 <= x)) + assert (logical (e(3))) + assert (isa (e(4), 'sym')) + assert (isequal (e(4), 2*x <= 10)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/cos.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cos.m +***** error cos (sym(1), 2) +***** assert (isequaln (cos (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = sinint(x); - f2 = 0.9460830703671830149414; + f1 = cos(x); + f2 = cos(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = sinint(A); - f2 = 0.9460830703671830149414; - f2 = [f2 f2; f2 f2]; + f1 = cos(A); + f2 = cos(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = sinint (d); - f = sinint (y); + A = cos (d); + f = cos (y); h = function_handle (f); B = h (d); assert (A, B, -eps) - end -5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/dsolve.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/dsolve.m +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/private_disp_name.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/private_disp_name.m ***** test - syms y(x) - de = diff(y, 2) - 4*y == 0; - f = dsolve(de); - syms C1 C2 - g1 = C1*exp(-2*x) + C2*exp(2*x); - g2 = C2*exp(-2*x) + C1*exp(2*x); - assert (isequal (rhs(f), g1) || isequal (rhs(f), g2)) + syms x + s = private_disp_name(x, 'x'); + assert (strcmp (s, 'x')) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/ismember.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ismember.m +***** assert (ismember (2, interval(sym(0),2))) +***** assert (~ismember (3, interval(sym(0),2))) ***** test - % Not enough initial conditions - syms y(x) C1 - de = diff(y, 2) + 4*y == 0; - g = 3*cos(2*x) + C1*sin(2*x); - try - f = dsolve(de, y(0) == 3); - waserr = false; - catch - waserr = true; - expectederr = regexp (lasterr (), 'Perhaps.*under-specified'); - end - assert ((waserr && expectederr) || isequal (rhs(f), g)) + % something in a matrix + syms x + A = [1 x; sym(pi) 4]; + assert (ismember (sym(pi), A)) + assert (ismember (x, A)) + assert (~ismember (2, A)) ***** test - % Solution in implicit form - syms y(x) C1 - sol=dsolve((2*x*y(x)-exp(-2*y(x)))*diff(y(x),x)+y(x)==0); - eq=x*exp(2*y(x))-log(y(x))==C1; - assert (isequal (rhs(sol), rhs(eq)) && isequal (lhs(sol), lhs(eq)) ) + % set + syms x + S = finiteset(2, sym(pi), x); + assert (ismember (x, S)) ***** test - % Compute solution and classification - syms y(x) C1 - [sol,classy]=dsolve((2*x*y(x)-exp(-2*y(x)))*diff(y(x),x)+y(x)==0); - eq=x*exp(2*y(x))-log(y(x))==C1; - assert (isequal (rhs(sol), rhs(eq)) && isequal (lhs(sol), lhs(eq))) - assert (strcmp (classy, '1st_exact')) + % set with positive symbol + syms p positive + S = finiteset(2, sym(pi), p); + assert (~ismember (-1, S)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/minus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/minus.m ***** test - % initial conditions (first order ode) - syms y(x) - de = diff(y, x) + 4*y == 0; - f = dsolve(de, y(0) == 3); - g = 3*exp(-4*x); - assert (isequal (rhs(f), g)) + % scalar + syms x + assert (isa (x-1, 'sym')) + assert (isa (x-x, 'sym')) + assert (isequal (x-x, sym(0))) ***** test - % initial conditions (second order ode) - syms y(x) - de = diff(y, 2) + 4*y == 0; - f = dsolve(de, y(0) == 3, subs(diff(y,x),x,0)==0); - g = 3*cos(2*x); - assert (isequal (rhs(f), g)) + % matrices + D = [0 1; 2 3]; + A = sym(D); + DZ = D - D; + assert (isequal ( A - D , DZ )) + assert (isequal ( A - A , DZ )) + assert (isequal ( D - A , DZ )) + assert (isequal ( A - 2 , D - 2 )) + assert (isequal ( 4 - A , 4 - D )) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/rewrite.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rewrite.m ***** test - % Dirichlet boundary conditions (second order ode) - syms y(x) - de = diff(y, 2) + 4*y == 0; - f = dsolve(de, y(0) == 2, y(1) == 0); - g = -2*sin(2*x)/tan(sym('2'))+2*cos(2*x); - assert (isequal (rhs(f), g)) + syms x + assert (isequal (rewrite(x, 'exp'), x)) ***** test - % Neumann boundary conditions (second order ode) - syms y(x) - de = diff(y, 2) + 4*y == 0; - f = dsolve(de, subs(diff(y,x),x,0)==1, subs(diff(y,x),x,1)==0); - g = sin(2*x)/2+cos(2*x)/(2*tan(sym('2'))); - assert (isequal (rhs(f), g)) + % empty + e = sym([]); + assert (isequal (rewrite(e, 'sin'), e)) ***** test - % Dirichlet-Neumann boundary conditions (second order ode) - syms y(x) - de = diff(y, 2) + 4*y == 0; - f = dsolve(de, y(0) == 3, subs(diff(y,x),x,1)==0); - g = 3*sin(2*x)*tan(sym('2'))+3*cos(2*x); - assert (isequal (rhs(f), g)) + syms x + A = [exp(x) exp(2*x)]; + B = [sinh(x) + cosh(x) sinh(2*x) + cosh(2*x)]; + assert (isequal (rewrite(A, 'sin'), B)) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/fresnelc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/fresnelc.m ***** test - % System of ODEs - syms x(t) y(t) C1 C2 - ode1 = diff(x(t),t) == 2*y(t); - ode2 = diff(y(t),t) == 2*x(t); - soln = dsolve([ode1, ode2]); - g1 = [2*C1*exp(-2*t) + 2*C2*exp(2*t), -2*C1*exp(-2*t) + 2*C2*exp(2*t)]; - g2 = [2*C1*exp(2*t) + 2*C2*exp(-2*t), 2*C1*exp(2*t) - 2*C2*exp(-2*t)]; - assert (isequal ([rhs(soln{1}), rhs(soln{2})], g1) || ... - isequal ([rhs(soln{1}), rhs(soln{2})], g2)) + a = fresnelc(sym(0)); + assert (isequal (a, sym(0))) ***** test - % System of ODEs (initial-value problem) - syms x(t) y(t) - ode_1=diff(x(t),t) == 2*y(t); - ode_2=diff(y(t),t) == 2*x(t); - sol_ivp=dsolve([ode_1,ode_2],x(0)==1,y(0)==0); - g_ivp=[exp(-2*t)/2+exp(2*t)/2,-exp(-2*t)/2+exp(2*t)/2]; - assert (isequal ([rhs(sol_ivp{1}),rhs(sol_ivp{2})], g_ivp)) + b = fresnelc(sym('oo')); + assert (isequal (b, sym(1)/2)) ***** test - syms y(x) - de = diff(y, 2) + 4*y == 0; - f = dsolve(de, y(0) == 0, y(sym(pi)/4) == 1); - g = sin(2*x); - assert (isequal (rhs(f), g)) + % values in a matrix + syms x + a = fresnelc([sym(0) sym('oo') x 1]); + b = [sym(0) sym(1)/2 fresnelc(x) fresnelc(sym(1))]; + assert (isequal (a, b)) ***** test - % Nonlinear example - syms y(x) C1 - e = diff(y, x) == y^2; - g = -1 / (C1 + x); - soln = dsolve(e); - assert (isequal (rhs(soln), g)) + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x + f = fresnelc (x); + h = function_handle (f); + A = h (1.1); + B = fresnelc (1.1); + assert (A, B) + end +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/cosd.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosd.m +***** error cosd (sym(1), 2) +***** assert (isequaln (cosd (sym(nan)), sym(nan))) ***** test - % Nonlinear example with initial condition - syms y(x) - e = diff(y, x) == y^2; - g = -1 / (x - 1); - soln = dsolve(e, y(0) == 1); - assert (isequal (rhs(soln), g)) + f1 = cosd (sym(1)); + f2 = cosd (1); + assert (double (f1), f2, -eps) +***** test + D = [10 30; 110 -45]; + A = sym(D); + f1 = cosd (A); + f2 = cosd (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/factorial.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/factorial.m +***** error factorial (sym(1), 2) ***** xtest - % forcing, Issue #183 - syms x(t) y(t) - ode1 = diff(x) == x + sin(t) + 2; - ode2 = diff(y) == y - t - 3; - soln = dsolve([ode1 ode2], x(0) == 1, y(0) == 2); - X = rhs(soln{1}); - Y = rhs(soln{2}); - assert (isequal (diff(X) - (X + sin(t) + 2), 0)) - assert (isequal (diff(Y) - (Y - t - 3), 0)) + assert (isequaln (factorial (sym(nan)), sym(nan))) !!!!! known failure -Python exception: NotImplementedError - occurred at line 6 of the Python code block: - sol = sp.dsolve(ode, ics=ics2) -***** test - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms f(x) a b - de = diff(f, x) == 4*f; - s = dsolve(de, f(a) == b); - assert (isequal (subs(rhs(s), x, a), b)) - end -16 tests, 15 passed, 1 known failure, 0 skipped -[inst/@sym/coth.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/coth.m -***** error coth (sym(1), 2) -***** assert (isequaln (coth (sym(nan)), sym(nan))) +assert (isequaln (factorial (sym (nan)), sym (nan))) failed ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = coth(x); - f2 = coth(d); + f1 = factorial(x); + f2 = factorial(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = coth(A); - f2 = coth(D); + f1 = factorial(A); + f2 = factorial(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - A = coth (d); - f = coth (y); + A = factorial (d); + f = factorial (y); h = function_handle (f); B = h (d); assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/besselj.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselj.m -***** test - X = [1 2 3; 4 5 6]; - ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; - n = double(ns); - A = double(besselj(ns, X)); - B = besselj(n, X); - assert (all (all (abs (A - B) < 50*eps*abs(A)))) +5 tests, 4 passed, 1 known failure, 0 skipped +[inst/@sym/jordan.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/jordan.m ***** test - % roundtrip - syms x - A = besselj(2, 10); - q = besselj(2, x); - h = function_handle(q); - B = h(10); - assert (abs (A - B) <= eps*abs(A)) -***** error besselj(sym('x')) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/mldivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/mldivide.m + % basic + A = sym ([2 1 0 0; 0 2 1 0; 0 0 3 0; 0 1 -1 3]); + [V, J] = jordan (A); + assert (isequal (inv (V) * A * V, J)); + assert (isequal (J, sym ([2 1 0 0; 0 2 0 0; 0 0 3 0; 0 0 0 3]))) + % the first 2 generalized eigenvectors form a cycle + assert (isequal ((A - J(1, 1) * eye (4)) * V(:, 1), zeros (4, 1))); + assert (isequal ((A - J(2, 2) * eye (4)) * V(:, 2), V(:, 1))); + % the last 2 generalized eigenvectors are eigenvectors + assert (isequal ((A - J(3, 3) * eye (4)) * V(:, 3), zeros (4, 1))); + assert (isequal ((A - J(4, 4) * eye (4)) * V(:, 4), zeros (4, 1))); ***** test - % scalar - syms x - assert (isa( x\x, 'sym')) - assert (isequal( x\x, sym(1))) - assert (isa( 2\x, 'sym')) - assert (isa( x\2, 'sym')) + % scalars + assert (isequal (jordan (sym (-10)), sym (-10))); + assert (isequal (jordan (sym ('x')), sym ('x'))); ***** test - % scalar \ matrix: easy, no system - D = 2*[0 1; 2 3]; - A = sym(D); - assert (isequal ( 2 \ A , D/2 )) - assert (isequal ( sym(2) \ A , D/2 )) + % diagonal matrices + A = diag (sym ([6 6 7])); + [V1, D] = eig (A); + [V2, J] = jordan (A); + assert (isequal (V1, V2)); + assert (isequal (D, J)); ***** test - % singular matrix - A = sym([1 2; 2 4]); - b = sym([5; 10]); - x = A \ b; - syms c1 - y = [-2*c1 + 5; c1]; - assert (isequal (x, y)) + % matrices of unknown entries + A = [sym('a') sym('b'); sym('c') sym('d')]; + [V, D] = eig (A); + J = jordan (A); + assert (isequal (simplify (D), simplify (J))); ***** test - % singular matrix, mult RHS - A = sym([1 2; 2 4]); - B = sym([[5; 10] [0; 2] [0; 0]]); - x = A \ B; - syms c1 c5 - y = [-2*c1 + 5 nan -2*c5; c1 nan c5]; - assert (isequaln (x, y)) -***** warning - % vpa, nearly singular matrix - A = sym([1 2; 2 4]); - A(1,1) = vpa('1.001'); - b = sym([1; 2]); - x = A \ b; - y = [sym(0); vpa('0.5')]; - assert (isequal (x, y)) -***** warning - % vpa, singular rhs - A = sym([1 2; 2 4]); - b = [vpa('1.01'); vpa('2')]; - x = A \ b; - assert (all(isnan(x))) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/isrow.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isrow.m -***** assert (isrow (sym ([1]))) -***** assert (isrow (sym ([1 2 3]))) -***** assert (~isrow (sym ([]))) -***** assert (~isrow (sym ([1 2 3]'))) -***** assert (~isrow (sym ([1 2; 3 4]))) + % matrices of mixed entries + A = [sym('x')+9 sym('y'); sym(0) 6]; + [V, D] = eig (A); + J = jordan (A); + assert (isequal (simplify (D), simplify (J))); 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/conj.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/conj.m +[inst/@sym/gamma.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/gamma.m +***** error gamma (sym(1), 2) +***** assert (isequaln (gamma (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - a = sym(6); - b = sym(5i); - assert (isequal (conj(a), a)) - assert (isequal (conj(b), -b)) - assert (isequal (conj(a+b), a-b)) + f1 = gamma(x); + f2 = gamma(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - syms x - assert (isequal (conj(conj(x)), x)) + D = [d d; d d]; + A = [x x; x x]; + f1 = gamma(A); + f2 = gamma(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - syms x real - assert (isequal (conj(x), x)) + % round trip + y = sym('y'); + A = gamma (d); + f = gamma (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/uminus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/uminus.m ***** test - % array + % scalar syms x - A = [x 6+1i; sym(1) x+2i]; - B = [conj(x) 6-1i; sym(1) conj(x)-2i]; - assert (isequal (conj(A), B)) + assert (isa (-x, 'sym')) + assert (isequal (-(-x), x)) ***** test - % true/false - t = sym(true); - f = sym(false); - assert (isequal ( conj(t), t)) - assert (isequal ( conj(f), f)) + % matrix + D = [0 1; 2 3]; + A = sym(D); + assert( isequal( -A, -D )) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/chebyshevT.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/chebyshevT.m +***** error chebyshevT (sym(1)) +***** error chebyshevT (sym(1), 2, 3) +***** assert (isequaln (chebyshevT (2, sym(nan)), sym(nan))) +***** shared x + syms x +***** assert(isequal(chebyshevT(0, x), sym(1))) +***** assert(isequal(chebyshevT(1, x), x)) +***** assert(isequal(chebyshevT(2, x), 2*x*x - 1)) +***** assert(isequal(chebyshevT([0 1 2], x), [sym(1) x (2*x*x-1)])) ***** test % round trip - syms x - d = 3 - 5i; - f = conj (x); - A = conj (d); - h = function_handle (f); - B = h (d); + if (python_cmd ('return Version(spver) > Version("1.2")')) + syms n z + f = chebyshevT (n, z); + h = function_handle (f, 'vars', [n z]); + A = h (1.1, 2.2); + B = chebyshevT (1.1, 2.2); assert (A, B) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/numel.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/numel.m + end +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/mod.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/mod.m +***** error mod (sym(1), 2, 3 ,4) +***** assert (isequal (mod (sym(5), 4), sym(1))) +***** assert (isequal (mod ([sym(5) 8], 4), [1 0] )) +***** assert (isequal (mod (sym(5), [2 3]), [1 2] )) +***** assert (isequal (mod ([sym(5) sym(6)], [2 3]), [1 0] )) ***** test - a = sym([1 2 3]); - assert(numel(a) == 3); + syms x + assert (isequal ( mod (5*x, 3), 2*x )) ***** test - % 2D array - a = sym([1 2 3; 4 5 6]); - assert(numel(a) == 6); -***** test - % empty - a = sym([]); - assert(numel(a) == 0); -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/hypergeom.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/hypergeom.m -***** assert (isequal (double (hypergeom ([1, 2], [2, 3], sym(0))), 1)) -***** test - % matrix input - syms z - a = sym([1 2]); - b = sym([3 4]); - A = hypergeom (a, b, [0 sym(1); 2 z]); - B = [hypergeom(a,b,0) hypergeom(a,b,1); hypergeom(a,b,2) hypergeom(a,b,z)]; - assert (isequal (A, B)) -***** test - % scalars for a and/or b - syms z - assert (isequal (hypergeom(1, 2, z), hypergeom({sym(1)}, {sym(2)}, z))) - assert (isequal (hypergeom([1 2], 3, z), hypergeom([1 2], {sym(3)}, z))) - assert (isequal (hypergeom(1, [2 3], z), hypergeom({sym(1)}, [2 3], z))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/numden.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/numden.m -***** test - [n, d] = numden(sym(2)); - assert (isequal (n, 2)); - assert (isequal (d, 1)); + syms x + a = [7*x^2 + 3*x + 3 3*x; 13*x^4 6*x]; + assert (isequal ( mod (a,3), [x^2 0; x^4 0] )) ***** test + % vector of polys with mix of vars: symvar on each syms x y - [n, d] = numden((x + pi)/(y + 6)); - assert (isequal (n, x + pi)); - assert (isequal (d, y + 6)); + a = [6*x 7*y]; + b = mod(a, 4); + c = [2*x 3*y]; + assert (isequal (b, c)) ***** test - syms x y - [n, d] = numden((x^2 + y^2)/(x*y)); - assert (isequal (n, x^2 + y^2)); - assert (isequal (d, x*y)); -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/unique.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/unique.m + % coeff has variable + syms x + n = sym('n', 'integer'); + p = (3*n + 2)*x; + q = mod(p, 3); + assert (isequal (q, 2*x)) ***** test - A = sym([1 2 3 3 5 3 2 6 5]); - B = sym([1 2 3 5 6]); - assert (isequal (unique(A), B)) + % coeff has variable + syms x a + p = a*x; + q = mod(p, 3); + q = children(q); + q = q(2); % order might be fragile! + w = subs(q, a, 5); + assert (isequal (w, 2)) ***** test + % different modulo syms x y - A = [1 2 3 3 4 5 5 6 7 7 x x y y]; - B = [1 2 3 4 5 6 7 x y]; - assert (isequal (unique(A), B)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/gammaln.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/gammaln.m -***** assert (isequal (gammaln (sym (3)), log (sym (2)))) -***** assert (isequal (gammaln (sym (10)), log (gamma (sym (10))))) -***** test - % compare to Maple: evalf(lnGAMMA(Pi)); - maple = vpa ('0.827694592323437101529578558452359951153502', 40); - us = vpa (gammaln (sym(pi)), 40); - assert (abs(double(maple-us)) < 1e-39) -***** test - % compare to Maple: evalf(lnGAMMA(3+2*I)); - maple = vpa ('-0.0316390593739611898037677296008797172022603', 40) + ... - vpa ('2.02219319750132712401643376238334982100512j', 40); - us = vpa (gammaln (sym(3) + 2i), 40); - assert (abs(double(maple-us)) < 1e-39) -***** test - % compare to Maple: evalf(lnGAMMA(-1.5)); - % notably, @double/gammaln has zero imag part - maple = vpa ('0.8600470153764810145109326816703567873271571', 40) - ... - vpa ('6.2831853071795864769252867665590057683943388j', 40); - us = vpa (gammaln (-sym(3)/2), 40); - assert (abs(double(maple-us)) < 1e-39) -***** assert (gammaln (pi), double (gammaln (sym (pi))), -3*eps) -***** assert (gammaln (100), double (gammaln (sym (100))), -3*eps) -***** assert (gammaln (1e-3), double (gammaln (1/sym (1e3))), -100*eps) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - f = gammaln (x); - h = function_handle (f); - A = h (1.1); - B = gammaln (1.1); - assert (A, B) - end -9 tests, 9 passed, 0 known failure, 0 skipped + q = mod([5*x + 10 5*y + 10], [2 3]); + assert (isequal (q, [x 2*y + 1])) +11 tests, 11 passed, 0 known failure, 0 skipped [inst/@sym/intersect.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/intersect.m ***** test @@ -6867,205 +9400,77 @@ C = intersect(A, B); assert( isequal( C, interval(sym(2), 3))) 6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/min.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/min.m -***** test - % scalars with dim - a = min(sym(pi), [], 1); - b = sym(pi); - assert (isequal (a, b)); - a = min(sym(pi), [], 2); - assert (isequal (a, b)); - a = max(sym(pi), [], 1); - assert (isequal (a, b)); - a = max(sym(pi), [], 2); - assert (isequal (a, b)); -***** shared A, D - D = [0 1 2 3]; - A = sym(D); -***** test - % row vectors - assert (isequal (min(A), sym(min(D)))) - assert (isequal (min(A), sym(0))) - assert (isequal (max(A), sym(max(D)))) - assert (isequal (max(A), sym(3))) -***** test - % row vectors with dim - assert (isequal (min(A, [], 1), sym(min(D, [], 1)))) - assert (isequal (min(A, [], 2), sym(min(D, [], 2)))) - assert (isequal (max(A, [], 1), sym(max(D, [], 1)))) - assert (isequal (max(A, [], 2), sym(max(D, [], 2)))) -***** test - % column vectors - A = A.'; - D = D.'; - assert (isequal (min(A), sym(min(D)))) - assert (isequal (min(A), sym(0))) - assert (isequal (max(A), sym(max(D)))) - assert (isequal (max(A), sym(3))) -***** test - % row vectors with dim - assert (isequal (min(A, [], 1), sym(min(D, [], 1)))) - assert (isequal (min(A, [], 2), sym(min(D, [], 2)))) - assert (isequal (max(A, [], 1), sym(max(D, [], 1)))) - assert (isequal (max(A, [], 2), sym(max(D, [], 2)))) -***** shared -***** test - % empty - a = min(sym([])); - assert(isempty(a)) - a = max(sym([])); - assert(isempty(a)) -***** test - % matrix - A = [1 4 6; 2 2 5]; - A = sym(A); - assert (isequal (min(A), sym([1 2 5]))) - assert (isequal (min(A, [], 1), sym([1 2 5]))) - assert (isequal (min(A, [], 2), sym([1; 2]))) - assert (isequal (max(A), sym([2 4 6]))) - assert (isequal (max(A, [], 1), sym([2 4 6]))) - assert (isequal (max(A, [], 2), sym([6; 5]))) -***** test - % index output is double not sym - [m, I] = min(sym(2), [], 1); - assert (strcmp(class(I), 'double')) - [m, I] = max(sym(2), [], 1); - assert (strcmp(class(I), 'double')) -***** test - % empty rows/columns, I is double - A = sym(zeros(0, 4)); - [m, I] = min(A, [], 1); - assert (strcmp(class(I), 'double')) - [m, I] = max(A, [], 1); - assert (strcmp(class(I), 'double')) - A = sym(zeros(3, 0)); - [m, I] = min(A, [], 2); - assert (strcmp(class(I), 'double')) - [m, I] = max(A, [], 2); - assert (strcmp(class(I), 'double')) -***** test - % index output - A = [0 1 9; 10 7 4]; - B = sym(A); - [m1, I1] = min(A); - [m2, I2] = min(B); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) - [m1, I1] = max(A); - [m2, I2] = max(B); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) -***** test - % index output, with dim - A = [0 1 9; 10 7 4]; - B = sym(A); - [m1, I1] = min(A, [], 1); - [m2, I2] = min(B, [], 1); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) - [m1, I1] = min(A, [], 2); - [m2, I2] = min(B, [], 2); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) - [m1, I1] = max(A, [], 1); - [m2, I2] = max(B, [], 1); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) - [m1, I1] = max(A, [], 2); - [m2, I2] = max(B, [], 2); - assert (isequal (I1, I2)) - assert (isequal (m1, double(m2))) -***** test - % empty columns - A = sym(zeros(0, 4)); - [m, I] = min(A, [], 1); - assert (isequal (size(m), [0 4])) - assert (isequal (size(I), [0 4])) - [m, I] = max(A, [], 1); - assert (isequal (size(m), [0 4])) - assert (isequal (size(I), [0 4])) -***** test - % empty rows - A = sym(zeros(3, 0)); - [m, I] = min(A, [], 2); - assert (isequal (size(m), [3 0])) - assert (isequal (size(I), [3 0])) - [m, I] = max(A, [], 2); - assert (isequal (size(m), [3 0])) - assert (isequal (size(I), [3 0])) -***** test - % another empty case - % we differ slightly from double which gives 1x0/0x1 - A = sym(zeros(3, 0)); - [m, I] = min(A, [], 1); - assert (isempty (m)) - assert (isempty (I)) - A = sym(zeros(0, 3)); - [m, I] = min(A, [], 2); - assert (isempty (m)) - assert (isempty (I)) +[inst/@sym/gt.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/gt.m ***** test - % binary op form, one a scalar - A = sym([3 1 9]); - m = min(A, sym(2)); - M = max(A, sym(2)); - assert (isequal (m, sym([2 1 2]))) - assert (isequal (M, sym([3 2 9]))) - m = min(sym(2), A); - M = max(sym(2), A); - assert (isequal (m, sym([2 1 2]))) - assert (isequal (M, sym([3 2 9]))) + % simple + x = sym(1); y = sym(1); e = x > y; + assert (~logical (e)) + x = sym(1); y = sym(2); e = x > y; + assert (~logical (e)) ***** test - % binary op form, both scalar - m = min(sym(1), sym(2)); - M = max(sym(2), sym(2)); - assert (isequal (m, sym(1))) - assert (isequal (M, sym(2))) -16 tests, 16 passed, 0 known failure, 0 skipped -[inst/@sym/int.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/int.m -***** shared x,y,a - syms x y a -***** assert(logical(int(cos(x)) - sin(x) == 0)) -***** assert(logical(int(cos(x),x) - sin(x) == 0)) -***** assert(logical(int(cos(x),x,0,1) - sin(sym(1)) == 0)) + % array -- array + syms x + a = sym([1 3 3 2*x]); + b = sym([2 x 3 10]); + e = a > b; + assert (isa (e, 'sym')) + assert (~logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 3 > x)) + assert (~logical (e(3))) + assert (isa (e(4), 'sym')) + assert (isequal (e(4), 2*x > 10)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/power.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/power.m ***** test - %% limits might be syms - assert( isequal (int(cos(x),x,sym(0),sym(1)), sin(sym(1)))) - assert( isequal (int(cos(x),x,0,a), sin(a))) + % scalar .^ scalar + syms x + assert (isa (x.^2, 'sym')) + assert (isa (2.^x, 'sym')) + assert (isa (x.^x, 'sym')) + assert (isequal (x.^2, x^2)) + assert (isequal (2.^x, 2^x)) + assert (isequal (x.^x, x^x)) ***** test - %% other variables present - assert( isequal (int(y*cos(x),x), y*sin(x))) + % scalar .^ matrix + D = [0 1; 2 3]; + A = sym(D); + assert (isequal ( sym(2).^D , 2.^D )) + assert (isequal ( sym(2).^A , 2.^A )) + assert (isequal ( 2.^D , 2.^A )) + assert (isequal ( 2.^A , 2.^A )) ***** test - %% limits as array - assert( isequal (int(cos(x),x,[0 1]), sin(sym(1)))) - assert( isequal (int(cos(x),x,sym([0 1])), sin(sym(1)))) - assert( isequal (int(cos(x),x,[0 a]), sin(a))) + % matrix .^ matrix + syms x + A = [x 2*x; 3*x 4*x]; + D = [0 1; 2 3]; + B = sym(D); + assert (isequal ( A.^D, [1 2*x; 9*x^2 64*x^3] )) + assert (isequal ( A.^B, [1 2*x; 9*x^2 64*x^3] )) ***** test - %% no x given - assert( isequal (int(cos(x),[0 1]), sin(sym(1)))) - assert( isequal (int(cos(x),sym([0 1])), sin(sym(1)))) - assert( isequal (int(cos(x),[0 a]), sin(a))) - assert( isequal (int(cos(x),0,a), sin(a))) + % matrix .^ scalar + syms x + A = [x 2*x]; + assert (isequal ( A.^2, [x^2 4*x^2] )) + assert (isequal ( A.^sym(2), [x^2 4*x^2] )) ***** test - %% integration of const - assert( isequal (int(sym(2),y), 2*y)) - assert( isequal (int(sym(2)), 2*x)) - assert( isequal (int(sym(2),[0 a]), 2*a)) - assert( isequal (int(sym(2),0,a), 2*a)) + % 1^oo + % (sympy >= 0.7.5 gives NaN, SMT R2013b: gives 1) + oo = sym(inf); + assert (isnan (1^oo)) ***** test - % componentwise int of array - A = [x x*x]; - assert (isequal (int(A, x), [x^2/2 x^3/3])) + % 1^zoo + % (1 on sympy 0.7.4--0.7.6, but nan in git (2014-12-12, a210908d4)) + zoo = sym('zoo'); + assert (isnan (1^zoo)) ***** test - % NonElementaryIntegral bug - % https://savannah.gnu.org/bugs/index.php?46831 - f = int(exp(exp(x))); - f = f + 2; - g = diff(f); - assert (isequal (g, exp(exp(x)))) -10 tests, 10 passed, 0 known failure, 0 skipped + % immutable test + A = sym([1 2]); + B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)]])'); + assert (isequal (A.^A, B.^B)) +7 tests, 7 passed, 0 known failure, 0 skipped [inst/@sym/curl.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/curl.m ***** shared x,y,z @@ -7110,322 +9515,36 @@ ***** error curl([sym(1) 2 3], {sym('x') sym('y') sym('z') sym('t')}) ***** error curl([sym(1) 2 3], 42, 42) 8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/repmat.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/repmat.m -***** test - % simple - syms x - A = [x x x; x x x]; - assert (isequal (repmat(x, 2, 3), A)) -***** test - % block cf double - A = [1 2 3; 4 5 6]; - B = sym(A); - C = repmat(A, 2, 3); - D = repmat(B, 2, 3); - assert (isequal (C, D)) -***** test - % empty - A = repmat(sym([]), 2, 3); - assert (isempty(A)); - assert (isequal (size(A), [0 0])) -***** test - % more empties - A = repmat(sym(pi), [0 0]); - assert (isequal (size(A), [0 0])) - A = repmat(sym(pi), [0 3]); - assert (isequal (size(A), [0 3])) - A = repmat(sym(pi), [2 0]); - assert (isequal (size(A), [2 0])) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/exp.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/exp.m -***** error exp (sym(1), 2) -***** assert (isequaln (exp (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = exp(x); - f2 = exp(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = exp(A); - f2 = exp(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = exp (d); - f = exp (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/equationsToMatrix.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/equationsToMatrix.m -***** test - syms x y z - [A, B] = equationsToMatrix ([x + y - z == 1, 3*x - 2*y + z == 3, 4*x - 2*y + z + 9 == 0], [x, y, z]); - a = sym ([1 1 -1; 3 -2 1; 4 -2 1]); - b = sym ([1; 3; -9]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - syms x y z - A = equationsToMatrix ([3*x + -3*y - 5*z == 9, 4*x - 7*y + -3*z == -1, 4*x - 9*y - 3*z + 2 == 0], [x, y, z]); - a = sym ([3 -3 -5; 4 -7 -3; 4 -9 -3]); - assert (isequal (A, a)) -***** test - syms x y - [A, B] = equationsToMatrix ([3*x + 9*y - 5 == 0, -8*x - 3*y == -2]); - a = sym ([3 9; -8 -3]); - b = sym ([5; -2]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - % override symvar order - syms x y - [A, B] = equationsToMatrix ([3*x + 9*y - 5 == 0, -8*x - 3*y == -2], [y x]); - a = sym ([9 3; -3 -8]); - b = sym ([5; -2]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - syms x y z - [A, B] = equationsToMatrix ([x - 9*y + z == -5, -9*y*z == -5], [y, x]); - a = sym ([[-9 1]; -9*z 0]); - b = sym ([-5 - z; -5]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - syms x y - [A, B] = equationsToMatrix (-6*x + 4*y == 5, 4*x - 4*y - 5, x, y); - a = sym ([-6 4; 4 -4]); - b = sym ([5; 5]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - % vertical list of equations - syms x y - [A, B] = equationsToMatrix ([-6*x + 4*y == 5; 4*x - 4*y - 5], [x y]); - a = sym ([-6 4; 4 -4]); - b = sym ([5; 5]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - syms x y - [A, B] = equationsToMatrix (5*x == 1, y, x - 6*y - 7, y); - a = sym ([0; 1; -6]); - b = sym ([1 - 5*x; 0; -x + 7]); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** error - syms x y - [A, B] = equationsToMatrix (x^2 + y^2 == 1, x - y + 1, x, y); -***** test - % single equation - syms x - [A, B] = equationsToMatrix (3*x == 2, x); - a = sym (3); - b = sym (2); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** test - % single equation w/ symvar - syms x - [A, B] = equationsToMatrix (3*x == 2); - a = sym (3); - b = sym (2); - assert (isequal (A, a)) - assert (isequal (B, b)) -***** error - if (python_cmd ('return Version(spver) <= Version("1.3")')) - error ('unique') - end - syms x - equationsToMatrix (3*x == 2, [x x]) -12 tests, 12 passed, 0 known failure, 0 skipped -[inst/@sym/and.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/and.m +[inst/@sym/xor.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/xor.m ***** shared t, f t = sym(true); f = sym(false); ***** test % simple - assert (isequal (t & f, f)) - assert (isequal (t & t, t)) -***** test - % mix wih nonsym - assert (isequal (t & false, f)) - assert (isequal (t & true, t)) - assert (isequal (t & 0, f)) - assert (isequal (t & 1, t)) - assert (isa (t & false, 'sym')) - assert (isa (t & 1, 'sym')) + assert (isequal (xor(t, f), t)) + assert (isequal (xor(t, t), f)) ***** test % array w = [t t f f]; z = [t f t f]; - assert (isequal (w & z, [t f f f])) -***** test - % number - assert (isequal( sym(1) & t, t)) - assert (isequal( sym(0) & t, f)) -***** test + assert (isequal (xor(w, z), [f t t f])) +***** xtest % output is sym even for scalar t/f - assert (isa (t & f, 'sym')) -***** test - % eqns, exclusive - syms x - e = (x == 3) & (x^2 == 9); - assert (isequal (subs(e, x, [-3 0 3]), [f f t])) -***** error and (sym('x'), 2, 3) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/log.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/log.m -***** error log (sym(1), 2) -***** assert (isequaln (log (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = log(x); - f2 = log(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = log(A); - f2 = log(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = log (d); - f = log (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/assume.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/assume.m -***** test - syms x - x = assume(x, 'positive'); - a = assumptions(x); - assert(strcmp(a, 'x: positive')) - x = assume(x, 'even'); - a = assumptions(x); - assert(strcmp(a, 'x: even')) - x = assume(x, 'odd'); - a = assumptions(x); - assert(strcmp(a, 'x: odd')) -***** error - syms x - x = assume (x, x); -***** error - syms x - x = assume (x/pi, 'integer') -***** test - % multiple assumptions - syms x - x = assume(x, 'positive', 'integer'); - [tilde, a] = assumptions(x, 'dict'); - assert(a{1}.integer) - assert(a{1}.positive) -***** test - % multiple assumptions - syms x - x = assume(x, 'even', 'positive'); - [tilde, a] = assumptions(x, 'dict'); - assert(a{1}.even) - assert(a{1}.positive) -***** test - % has output so avoids workspace - syms x positive - x2 = x; - f = sin(x); - x = assume(x, 'negative'); - a = assumptions(x); - assert(strcmp(a, 'x: negative')) - a = assumptions(x2); - assert(strcmp(a, 'x: positive')) - a = assumptions(f); - assert(strcmp(a, 'x: positive')) -***** test - % clear: has output so avoids workspace - syms x positive - f = 2*x; - x2 = assume(x, 'clear'); - assert (~ isempty (assumptions (f))); -***** test - % has no output so does workspace - syms x positive - x2 = x; - f = sin(x); - assume(x, 'negative'); - a = assumptions(x); - assert(strcmp(a, 'x: negative')) - a = assumptions(x2); - assert(strcmp(a, 'x: negative')) - a = assumptions(f); - assert(strcmp(a, 'x: negative')) -***** test - % clear: has not output so does workspace - syms x positive - f = 2*x; - assume(x, 'clear'); - assert (isempty (assumptions (f))); - assert (isempty (assumptions ())); + % ₣IXME: should match other bool fcns + assert (isa (xor(t, f), 'sym')) ***** test - syms x positive - assume (x, 'clear') - assert (isempty (assumptions ())) -***** error + % eqns syms x - x2 = assume (x, 'clear', 'real'); -***** error - syms a - assume (a > 0) -***** test - syms x y - assume ([x y], 'real') - assert (strcmp (assumptions (x), 'x: real')) - assert (strcmp (assumptions (y), 'y: real')) -***** test - syms x y - assume ([x y], 'positive', 'even') - assert (strcmp (assumptions (x), 'x: positive, even') || strcmp (assumptions (x), 'x: even, positive')) - assert (strcmp (assumptions (y), 'y: positive, even') || strcmp (assumptions (y), 'y: even, positive')) -***** test - % with output, original x and y are unchanged - syms x y - [p, q] = assume ([x y], 'real'); - assert (isempty (assumptions (x))) - assert (isempty (assumptions (y))) - assert (strcmp (assumptions (p), 'x: real')) - assert (strcmp (assumptions (q), 'y: real')) -***** test - % matrix input - syms a b c d - assume ([a b; c d], 'real') - assert (strcmp (assumptions (a), 'a: real')) - assert (strcmp (assumptions (b), 'b: real')) - assert (strcmp (assumptions (c), 'c: real')) - assert (strcmp (assumptions (d), 'd: real')) -16 tests, 16 passed, 0 known failure, 0 skipped -[inst/@sym/argnames.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/argnames.m + e = xor(x == 4, x == 5); + assert (isequal (subs(e, x, [3 4 5 6]), [f t t f])) ***** test - % basic tests + % eqns, exclusive syms x - f = 2*x; - assert (isempty (argnames(x))) - assert (isempty (argnames(f))) -1 test, 1 passed, 0 known failure, 0 skipped + e = xor(x == 3, x^2 == 9); + assert (isequal (subs(e, x, [-3 0 3]), [t f f])) +***** error xor (sym('x'), 1, 2) +6 tests, 6 passed, 0 known failure, 0 skipped [inst/@sym/trace.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/trace.m ***** test @@ -7437,638 +9556,57 @@ A = [x 3; 2*x 5]; assert (isequal (trace(A), x + 5)) 2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticCPi.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCPi.m -***** error ellipticCPi (sym (1)) -***** error ellipticCPi (sym (1), 2, 3) -***** assert (double (ellipticCPi (0, sym (1)/2)), 1.854074677, 10e-10) -***** assert (double (ellipticCPi (sym (6)/10, sym(71)/10)), 1.29469534336658, -20*eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/max.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/max.m -***** test - % simple - assert (isequal (max([sym(10) sym(11)]), sym(11))) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/ei.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ei.m -***** test - syms x - f = ei(sym(0)); - assert (double(f) == -inf) -***** test - D = [1.895117816355937 4.954234356001890]; - A = ei(sym([1 2])); - assert (all (abs(double(A) - D) < 1e-15)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/laplace.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/laplace.m -***** test - % basic - syms t s u w - assert(logical( laplace(cos(3*t)) == s/(s^2+9) )) - assert(logical( laplace(t^3) == 6/s^4 )) -***** test - % matlab SMT compat - syms t s u w z - assert(logical( laplace(exp(2*t)) == 1/(s-2) )) - assert(logical( laplace(exp(2*s)) == 1/(z-2) )) - assert(logical( laplace(exp(2*u),w) == 1/(w-2) )) - assert(logical( laplace(exp(2*u),u,w) == 1/(w-2) )) -***** test - syms x s t z - % matlab SMT prefers t over x (WTF not symvar like we do?) - assert (isequal (laplace(x*exp(t), z), exp(t)/z^2)) - % as usual, you can just specify: - assert (isequal (laplace(x*exp(t), t, z), x/(z - 1))) % SMT result - assert (isequal (laplace(x*exp(t), x, z), exp(t)/z^2)) -***** test - % constant, issue #250 - syms s - f = laplace(2, s); - assert (isequal (f, 2/s)) -***** test - % Dirac delta and Heaviside tests - syms t s - assert (isequal (laplace(dirac(t-3)), exp(-3*s))) - assert (isequal (laplace((t-3)*heaviside(t-3)), exp(-3*s)/s^2)) -***** xtest - % Differential operator to algebraic - % SymPy cannot evaluate? (Issue #170) - syms s f(t) - assert(logical( laplace(diff(f(t),t),t,s) == s*laplace(f(t),t,s)-f(0) )) -!!!!! known failure -assert (logical (laplace (diff (f (t), t), t, s) == s * laplace (f (t), t, s) - f (0))) failed -6 tests, 5 passed, 1 known failure, 0 skipped -[inst/@sym/transpose.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/transpose.m -***** test - x = sym(1); - assert (isequal (x.', x)) -***** assert (isempty (sym([]).')) -***** test - syms x; - assert (isequal (x.', x)) -***** test - A = [1 2; 3 4]; - assert(isequal( sym(A).' , sym(A.') )) -***** test - A = [1 2] + 1i; - assert(isequal( sym(A).' , sym(A.') )) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/plus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/plus.m -***** test - % basic addition - syms x - assert (isa (x+5, 'sym')) - assert (isa (5+x, 'sym')) - assert (isa (5+sym(4), 'sym')) - assert (isequal (5+sym(4), sym(9))) -***** test - % array addition - syms x - D = [0 1; 2 3]; - A = [sym(0) 1; sym(2) 3]; - DZ = D - D; - assert( isequal ( A + D , 2*D )) - assert( isequal ( D + A , 2*D )) - assert( isequal ( A + A , 2*D )) - assert( isequal ( A + 2 , D + 2 )) - assert( isequal ( 4 + A , 4 + D )) -***** test - % ensure MatrixExpr can be manipulated somewhat - syms n m integer - A = sym('A', [n m]); - B = subs(A, [n m], [5 6]); - B = B + 1; - assert (isa (B, 'sym')) - C = B(1, 1); % currently makes a MatrixElement - C = C + 1; - assert (isa (C, 'sym')) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/cosd.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosd.m -***** error cosd (sym(1), 2) -***** assert (isequaln (cosd (sym(nan)), sym(nan))) -***** test - f1 = cosd (sym(1)); - f2 = cosd (1); - assert (double (f1), f2, -eps) -***** test - D = [10 30; 110 -45]; - A = sym(D); - f1 = cosd (A); - f2 = cosd (D); - assert (double (f1), f2, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/kron.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/kron.m -***** test - syms x y - A = [sin(x), sin(y); x, y]; - B = ones(2); - expected = sym([sin(x), sin(x), sin(y), sin(y); sin(x), sin(x), sin(y), sin(y); x, x, y, y; x, x, y, y]); - assert (isequal (kron(A, B), expected)) -***** test - syms x y - A = [sin(x), sin(y); x, y]; - B = 2; - assert (isequal (kron(A, B), 2*A)) -***** test - syms x y - A = [sin(x), sin(y)]; - B = 2; - assert (isequal( kron(B, A), 2*A)) -***** test - syms x y; - X = [tan(x), tan(x)]; - Y = [cot(x); cot(x)]; - expected = sym(ones(2)); - assert (isequal (simplify(kron(X, Y)), expected)) -***** test - syms x y z - X = [x, y, z]; - Y = [y, y; x, x]; - expected = [x*y, x*y, y^2, y^2, y*z, y*z; x^2, x^2, x*y, x*y, x*z, x*z]; - assert (isequal (kron(X, Y), expected)) -***** test - syms x y - X = [x, x^2; y, y^2]; - Y = [1, 0; 0, 1]; - expected = [x, x^2, 0, 0; y, y^2, 0, 0; 0, 0, x, x^2; 0, 0, y, y^2]; - assert (isequal (kron(Y, X), expected)) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/rdivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rdivide.m -***** test - % scalar - syms x - assert (isa (x ./ 1, 'sym')) - assert (isa (x ./ x, 'sym')) - assert (isequal (x ./ 1, x)) - assert (isequal (x ./ x, sym(1))) -***** test - % matrix-scalar - D = 2*[0 1; 2 3]; - A = sym(D); - assert (isequal ( A./2 , D/2 )) - assert (isequal ( A./sym(2) , D/2 )) - assert (isequal ( D./sym(2) , D/2 )) -***** test - % matrix ./ matrix - D = [1 2; 3 4]; - A = sym(D); - assert (isequal ( A./A , D./D )) - assert (isequal ( A./D , D./D )) - assert (isequal ( D./A , D./D )) -***** test - % matrix ./ matrix with symbols - syms x y - A = [x y; x^2 2*y]; - B = [y x; x y]; - assert (isequal ( A./A , sym(ones(2,2)) )) - assert (isequal ( A./B , [x/y y/x; x 2] )) -***** test - % scalar ./ matrix - D = [1 2; 3 4]; - A = sym(D); - assert (isequal ( 12./A , 12./D )) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/airy.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/airy.m -***** test - syms z - a = airy(0, z); - ap = airy(1, z); - assert (isequal (diff (a), ap)) - assert (isequal (diff (ap), z*a)) -***** test - syms z - b = airy(2, z); - bp = airy(3, z); - assert (isequal (diff (b), bp)) - assert (isequal (diff (bp), z*b)) -***** test - % default to k=0 - syms z - a = airy(0, z); - a2 = airy(z); - assert (isequal (a, a2)) -***** error airy(0, sym('x'), 2) -***** error airy(4, sym('z')) -***** error airy(-1, sym('z')) -***** test - % symbolic k - syms z - b1 = airy(2, z); - b2 = airy(sym(2), z); - assert (isequal (b1, b2)) -***** test - % doubles, relative error - X = [1 2 pi; 4i 5 6+6i]; - Xs = sym(X); - for k = 0:3 - A = double(airy(k, Xs)); - B = airy(k, X); - assert (all (all (abs(A - B) < 500*eps*abs(A)))) - end -***** test - % round-trip - syms x - for k = 0:3 - A = airy(k, 10); - q = airy(k, x); - h = function_handle(q); - B = h(10); - assert (abs(A-B) < 500*eps*abs(A)) - end -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/display.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/display.m -***** test - assert(true) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/acos.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acos.m -***** error acos (sym(1), 2) -***** assert (isequaln (acos (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = acos(x); - f2 = acos(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = acos(A); - f2 = acos(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = acos (d); - f = acos (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ne.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ne.m -***** test - % simple - x = sym(1); y = sym(1); e = x ~= y; - assert (~logical (e)) - x = sym(1); y = sym(2); e = x ~= y; - assert (logical(e)) -***** test - % array -- array - syms x - a = sym([1 3 3 2*x]); - b = sym([2 x 3 10]); - e = a ~= b; - assert (isa (e, 'sym')) - assert (logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 3 ~= x)) - assert (~logical (e(3))) - assert (isa (e(4), 'sym')) - assert (isequal (e(4), 2*x ~= 10)) -***** test - % oo - syms oo x - e = oo ~= x; - assert (isa (e, 'sym')) - s = strtrim (disp (e, 'flat')); - % SymPy <= 0.7.6.x will be '!=', newer gives 'Ne', test both - assert (strcmp (s, 'oo != x') || strcmp (s, 'Ne(oo, x)')) -***** test - % nan - syms oo x - snan = sym(nan); - e = snan ~= sym(0); - assert (logical (e)) - e = snan ~= snan; - assert (logical (e)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/ctranspose.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ctranspose.m -***** test - x = sym(1); - assert (isequal (x', x)) -***** assert (isempty (sym([])')) -***** test - % conjugate does nothing to real x - syms x real - assert (isequal (x', x)) -***** test - % complex - syms x - assert (isequal (x', conj(x))) -***** test - % complex array - syms x - A = [x 2*x]; - B = [conj(x); 2*conj(x)]; - assert(isequal(A', B)) -***** test - A = [1 2; 3 4]; - assert(isequal( sym(A)' , sym(A') )) -***** test - A = [1 2] + 1i; - assert(isequal( sym(A)' , sym(A') )) -***** test - % true/false +[inst/@sym/or.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/or.m +***** shared t, f t = sym(true); f = sym(false); - assert (isequal ( t', t)) - assert (isequal ( f', f)) -***** test - % more true/false - syms x - A = [x true 1i]; - B = [conj(x); true; -sym(1i)]; - assert (isequal ( A', B)) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/qr.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/qr.m -***** test - % scalar - [q, r] = qr(sym(6)); - assert (isequal (q, sym(1))) - assert (isequal (r, sym(6))) - syms x - [q, r] = qr(x); - assert (isequal (q*r, x)) - % could hardcode this if desired - %assert (isequal (q, sym(1))) - %assert (isequal (r, x)) -***** test - A = [1 2; 3 4]; - B = sym(A); - [Q, R] = qr(B); - assert (isequal (Q*R, B)) - assert (isequal (R(2,1), sym(0))) - assert (isequal (Q(:,1)'*Q(:,2), sym(0))) - %[QA, RA] = qr(A) - %assert ( max(max(double(Q)-QA)) <= 10*eps) - %assert ( max(max(double(Q)-QA)) <= 10*eps) -***** test - % non square: tall skinny - A = sym([1 2; 3 4; 5 6]); - [Q, R] = qr (A, 0); - assert (size (Q), [3 2]) - assert (size (R), [2 2]) - assert (isequal (Q*R, A)) -***** error - % non square: short fat: not yet implemented upstream - [Q, R] = qr (sym([1 2]), 0); -***** error - [Q, R, P] = qr (sym(1)) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/fliplr.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/fliplr.m ***** test % simple - syms x - A = [x 2; sym(pi) x]; - B = [2 x; x sym(pi)]; - assert (isequal (fliplr(A), B)) -***** test - % simple, odd # cols - syms x - A = [x 2 sym(pi); x 1 2]; - B = [sym(pi) 2 x; 2 1 x]; - assert (isequal (fliplr(A), B)) -***** test - % scalar - syms x - assert (isequal (fliplr(x), x)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/lgamma.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/lgamma.m -***** test - % tested by gammaln - assert (isequal (lgamma (sym ('x')), gammaln (sym ('x')))) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/ones.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ones.m + assert (isequal (t | f, t)) + assert (isequal (t | t, t)) + assert (isequal (f | f, f)) ***** test - y = ones(sym(2)); - x = [1 1; 1 1]; - assert( isequal( y, sym(x))) + % array + w = [t t f f]; + z = [t f t f]; + assert (isequal (w | z, [t t t f])) ***** test - y = ones(sym(2), 1); - x = [1; 1]; - assert( isequal( y, sym(x))) + % output is sym even for scalar t/f + assert (isa (t | f, 'sym')) ***** test - y = ones(sym(1), 2); - x = [1 1]; - assert( isequal( y, sym(x))) -***** assert( isa( ones(sym(2), 'double'), 'double')) -***** assert( isa( ones(3, sym(3), 'single') , 'single')) -***** assert( isa( ones(3, sym(3)), 'sym')) -***** assert( isa( ones(3, sym(3), 'sym'), 'sym')) -***** xtest - % Issue #13 - assert( isa( ones(3, 3, 'sym'), 'sym')) -!!!!! known failure -invalid data type specified -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/iscolumn.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/iscolumn.m -***** assert (iscolumn (sym ([1]))) -***** assert (iscolumn (sym ([1 2 3]'))) -***** assert (~iscolumn (sym ([]))) -***** assert (~iscolumn (sym ([1 2 3]))) -***** assert (~iscolumn (sym ([1 2; 3 4]))) + % eqns + syms x + e = or(x == 4, x == 5); + assert (isequal (subs(e, x, [3 4 5 6]), [f t t f])) +***** error or (sym(1), 2, 3) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/cot.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cot.m -***** error cot (sym(1), 2) -***** assert (isequaln (cot (sym(nan)), sym(nan))) +[inst/@sym/sinh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinh.m +***** error sinh (sym(1), 2) +***** assert (isequaln (sinh (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = cot(x); - f2 = cot(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = cot(A); - f2 = cot(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = cot (d); - f = cot (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/null.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/null.m -***** test - A = sym([1 2; 3 4]); - assert (isempty (null (A))) -***** assert (isempty (null (sym(4)))) -***** test - A = sym([1 2 3; 3 4 5]); - assert (isequal (null(A), sym([1;-2;1]))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/orth.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/orth.m -***** test - A = [1 2; 3 6]; - K = orth(A); - L = orth(sym(A)); - assert (isequal (size(L), [2 1])) - dif1 = abs (double(L) - K); - dif2 = abs (double(L) + K); - assert (all (dif1 < 1e-15) || all (dif2 < 1e-15)) -***** test - A = [1; 3]; - K = orth(A); - L = orth(sym(A)); - assert (isequal (size(L), [2 1])) - dif1 = abs (double(L) - K); - dif2 = abs (double(L) + K); - assert (all (dif1 < 1e-16) || all (dif2 < 1e-16)) -***** test - A = sym([1 2; 3 4]); - L = orth(sym(A)); - assert (isequal (size(L), [2 2])) - v = L(:, 1); - w = L(:, 2); - assert (isAlways (v' * v == 1)) - assert (isAlways (w' * w == 1)) - assert (isAlways (v' * w == 0)) -***** test - A = sym([1 1; 1 0; 1 0]); - L = orth(sym(A)); - assert (isequal (size(L), [3 2])) - v = L(:, 1); - w = L(:, 2); - assert (isAlways (v' * v == 1)) - assert (isAlways (w' * w == 1)) - assert (isAlways (v' * w == 0)) - % y and z components must be equal - assert (isAlways (v(2) == v(3))) - assert (isAlways (w(2) == w(3))) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/cbrt.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cbrt.m -***** error cbrt (sym(1), 2) -***** assert (isequaln (cbrt (sym(nan)), sym(nan))) -***** shared x, d - d = 2; - x = sym('2'); -***** test - f1 = cbrt(x); - f2 = 1.2599210498948731647; + f1 = sinh(x); + f2 = sinh(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = cbrt(A); - f2 = 1.2599210498948731647; - f2 = [f2 f2; f2 f2]; + f1 = sinh(A); + f2 = sinh(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - if (exist ('OCTAVE_VERSION', 'builtin')) - A = cbrt (d); - else - % Issue #742 - A = d^(1/3); - end - f = cbrt (y); + A = sinh (d); + f = sinh (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/imag.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/imag.m -***** assert (isequal (imag (sym (4) + 3i),3)) -***** test - syms x y real - z = x + 1i*y; - assert (isequal (imag (z),y)) -***** test - syms x y real - Z = [4 x + 1i*y; 1i*y 4 + 3i]; - assert (isequal (imag (Z),[0 y; y 3])) -***** test - syms x real - d = exp (x*i); - assert (isequal (imag (d), sin (x))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms x - d = 3 - 5i; - f = imag (x); - A = imag (d); - h = function_handle (f); - B = h (d); - assert (A, B) - end -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/power.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/power.m -***** test - % scalar .^ scalar - syms x - assert (isa (x.^2, 'sym')) - assert (isa (2.^x, 'sym')) - assert (isa (x.^x, 'sym')) - assert (isequal (x.^2, x^2)) - assert (isequal (2.^x, 2^x)) - assert (isequal (x.^x, x^x)) -***** test - % scalar .^ matrix - D = [0 1; 2 3]; - A = sym(D); - assert (isequal ( sym(2).^D , 2.^D )) - assert (isequal ( sym(2).^A , 2.^A )) - assert (isequal ( 2.^D , 2.^A )) - assert (isequal ( 2.^A , 2.^A )) -***** test - % matrix .^ matrix - syms x - A = [x 2*x; 3*x 4*x]; - D = [0 1; 2 3]; - B = sym(D); - assert (isequal ( A.^D, [1 2*x; 9*x^2 64*x^3] )) - assert (isequal ( A.^B, [1 2*x; 9*x^2 64*x^3] )) -***** test - % matrix .^ scalar - syms x - A = [x 2*x]; - assert (isequal ( A.^2, [x^2 4*x^2] )) - assert (isequal ( A.^sym(2), [x^2 4*x^2] )) -***** test - % 1^oo - % (sympy >= 0.7.5 gives NaN, SMT R2013b: gives 1) - oo = sym(inf); - assert (isnan (1^oo)) -***** test - % 1^zoo - % (1 on sympy 0.7.4--0.7.6, but nan in git (2014-12-12, a210908d4)) - zoo = sym('zoo'); - assert (isnan (1^zoo)) -***** test - % immutable test - A = sym([1 2]); - B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)]])'); - assert (isequal (A.^A, B.^B)) -7 tests, 7 passed, 0 known failure, 0 skipped [inst/@sym/horner.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/horner.m ***** error horner (sym(1), 2, 3) @@ -8094,1014 +9632,96 @@ syms x assert (isequal (horner(6, x), sym(6))) 6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/euler.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/euler.m -***** error euler (sym(1), 2, 3) -***** assert (isequal (euler (sym(0)), sym(1))) -***** test - m = sym([0 1 2; 8 10 888889]); - A = euler (m); - B = sym([1 0 -1; 1385 -50521 0]); - assert (isequal (A, B)) -***** test - if (python_cmd('return Version(spver) > Version("1.1.1")')) - syms x - assert (isequal (euler(6, x), x^6 - 3*x^5 + 5*x^3 - 3*x)) - end -***** test - if (python_cmd('return Version(spver) > Version("1.1.1")')) - assert (isnan (euler (3, sym(nan)))) - end -***** test - if (python_cmd('return Version(spver) > Version("1.1.1")')) - syms m x - em = euler (m, x); - A = subs(em, [m x], [2 sym(pi)]); - assert (isequal (A, sym(pi)^2 - sym(pi))) - end -***** test - % vectorized - if (python_cmd('return Version(spver) > Version("1.1.1")')) - syms x y - A = euler([1; 2], [x; y]); - B = [x - sym(1)/2; y^2 - y]; - assert (isequal (A, B)) - end -***** test - % round trip - if (python_cmd('return Version(spver) > Version("1.1.1")')) - syms m z - f = euler (m, z); - h = function_handle (f, 'vars', [m z]); - A = h (2, 2.2); - B = euler (2, 2.2); - assert (A, B) - end -***** test - % compare vpa to maple: Digits:=34; evalf(euler(13, exp(1)+Pi*I/13)); - if (python_cmd('return Version(spver) > Version("1.1.1")')) - A = vpa('1623.14184180556920918624604530515') + ... - vpa('4270.98066989140286451493108809574')*1i; - z = vpa (exp(1), 32) + vpa(pi, 32)/13*1i; - B = euler (13, z); - relerr = double(abs((B - A)/A)); - assert (abs(relerr) < 2e-31); - end -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/symreplace.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/symreplace.m -***** test - % start with assumptions on x then remove them - syms x positive - f = x*10; - symreplace(x, sym('x')) - assert(isempty(assumptions(x))) -***** test - % replace x with y - syms x - f = x*10; - symreplace(x, sym('y')) - assert( isequal (f, 10*sym('y'))) -***** test - % gets inside cells - syms x - f = {x 1 2 {3 4*x}}; - symreplace(x, sym('y')) - syms y - assert( isequal (f{1}, y)) - assert( isequal (f{4}{2}, 4*y)) -***** test - % gets inside structs/cells - syms x - my.foo = {x 1 2 {3 4*x}}; - my.bar = x; - g = {'ride' my 'motor' 'sicle'}; - symreplace(x, sym('y')) - syms y - f = g{2}; - assert( isequal (f.foo{1}, y)) - assert( isequal (f.foo{4}{2}, 4*y)) - assert( isequal (f.bar, y)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/resize.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/resize.m -***** test - B = sym([1 0 0; 0 0 0]); - assert (isequal (resize (sym(1), 2, 3), B)) - assert (isequal (resize (sym(1), [2 3]), B)) -***** test - B = sym([1 0; 0 0]); - assert (isequal (resize (sym(1), 2), B)) -***** test - A = sym([pi 2; 3 4]); - assert (isequal (resize (A, 1), sym(pi))) -***** assert (isequal (size (resize (sym(1), 0, 0)), [0 0])) -***** assert (isequal (size (resize (sym(1), 6, 0)), [6 0])) -***** assert (isequal (size (resize (sym(1), 0, 3)), [0 3])) -***** error resize (sym(1)) -***** error resize (sym(1), 2, 3, 4) -***** error resize (sym(1), [2 3 4]) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/dirac.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/dirac.m -***** error dirac (sym(1), 2) -***** assert (isequaln (dirac (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = dirac(x); - f2 = dirac(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = dirac(A); - f2 = dirac(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = dirac (d); - f = dirac (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/sinh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinh.m -***** error sinh (sym(1), 2) -***** assert (isequaln (sinh (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = sinh(x); - f2 = sinh(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = sinh(A); - f2 = sinh(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = sinh (d); - f = sinh (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/sin.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sin.m -***** error sin (sym(1), 2) -***** assert (isequaln (sin (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = sin(x); - f2 = sin(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = sin(A); - f2 = sin(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = sin (d); - f = sin (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/chebyshevU.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/chebyshevU.m -***** error chebyshevU (sym(1)) -***** error chebyshevU (sym(1), 2, 3) -***** assert (isequaln (chebyshevU (2, sym(nan)), sym(nan))) -***** shared x - syms x -***** assert(isequal(chebyshevU(0, x), sym(1))) -***** assert(isequal(chebyshevU(1, x), 2*x)) -***** assert(isequal(chebyshevU(2, x), 4*x*x - 1)) -***** assert(isequal(chebyshevU([0 1 2], x), [sym(1) 2*x (4*x*x-1)])) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - syms n z - f = chebyshevU (n, z); - h = function_handle (f, 'vars', [n z]); - A = h (1.1, 2.2); - B = chebyshevU (1.1, 2.2); - assert (A, B) - end -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/cond.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cond.m -***** test - A = [1 2; 3 4]; - B = sym(A); - k1 = cond(A); - k2 = cond(B); - k3 = double(k2); - assert (k1 - k3 <= 100*eps) -***** test - % matrix with symbols - syms x positive - A = [x 0; sym(0) 2*x]; - k1 = cond(A); - assert (isequal (k1, sym(2))) +[inst/@sym/ezsurf.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ezsurf.m +***** error + syms u v t + ezsurf(u*v, 2*u*v, 3*v*t) +***** error + syms u v t + ezsurf(u*v, 2*u*v, u*v*t) 2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/isinf.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isinf.m -***** shared x,zoo,oo,snan - oo = sym(inf); - zoo = sym('zoo'); - x = sym('x'); - snan = sym(nan); -***** test - % various ops that give inf and nan - assert (isinf(oo)) - assert (isinf(zoo)) - assert (isinf(oo+oo)) - assert (~isinf(oo+zoo)) - assert (~isinf(0*oo)) - assert (~isinf(0*zoo)) - assert (~isinf(snan)) - assert (~isinf(oo-oo)) - assert (~isinf(oo-zoo)) -***** test - % arrays - assert (isequal( isinf([oo zoo]), [1 1] )) - assert (isequal( isinf([oo 1]), [1 0] )) - assert (isequal( isinf([10 zoo]), [0 1] )) - assert (isequal( isinf([x oo x]), [0 1 0] )) -***** test - % Must not contain string 'symbol'; these all should make an - % actual infinity. Actually a ctor test, not isinf. - % IIRC, SMT in Matlab 2013b fails. - oo = sym(inf); - assert (isempty (strfind (sympy (oo), 'Symbol'))) - oo = sym(-inf); - assert (isempty (strfind (sympy (oo), 'Symbol'))) - oo = sym('inf'); - assert (isempty (strfind (sympy (oo), 'Symbol'))) - oo = sym('-inf'); - assert (isempty (strfind (sympy (oo), 'Symbol'))) - oo = sym('Inf'); - assert (isempty (strfind (sympy (oo), 'Symbol'))) -***** test - % ops with infinity shouldn't collapse - syms x oo zoo - y = x + oo; - assert (~isempty (strfind (lower (sympy (y)), 'add') )) - y = x - oo; - assert (~isempty (strfind (lower (sympy (y)), 'add') )) - y = x - zoo; - assert (~isempty (strfind (lower (sympy (y)), 'add') )) - y = x*oo; - assert (~isempty (strfind (lower (sympy (y)), 'mul') )) -***** test - % ops with infinity are not necessarily infinite - syms x oo zoo - y = x + oo; - assert(~isinf(y)) % SMT 2014a says "true", I disagree - y = x - zoo; - assert(~isinf(y)) - y = x*oo; - assert(~isinf(y)) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/vertcat.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/vertcat.m -***** test - % basic - syms x - A = [x; x]; - B = vertcat(x, x); - C = vertcat(x, x, x); - assert (isa (A, 'sym')) - assert (isa (B, 'sym')) - assert (isa (C, 'sym')) - assert (isequal (size(A), [2 1])) - assert (isequal (size(B), [2 1])) - assert (isequal (size(C), [3 1])) -***** test - % basic, part 2 - syms x - A = [x; 1]; - B = [1; x]; - C = [1; 2; x]; - assert (isa (A, 'sym')) - assert (isa (B, 'sym')) - assert (isa (C, 'sym')) - assert (isequal (size(A), [2 1])) - assert (isequal (size(B), [2 1])) - assert (isequal (size(C), [3 1])) -***** test - % column vectors - a = [sym(1); 2]; - b = [sym(3); 4]; - assert (isequal ( [a;b] , [1; 2; 3; 4] )) - assert (isequal ( [a;b;a] , [1; 2; 3; 4; 1; 2] )) -***** test - % row vectors - a = [sym(1) 2]; - b = [sym(3) 4]; - assert (isequal ( [a;b] , [1 2; 3 4] )) - assert (isequal ( [a;b;a] , [1 2; 3 4; 1 2] )) -***** test - % row vector, other row - a = [sym(1) 2]; - assert (isequal ( [a; [sym(3) 4]] , [1 2; 3 4] )) -***** test - % empty vectors - v = [sym(1) sym(2)]; - a = [v; []]; - assert (isequal (a, v)) - a = [[]; v; []]; - assert (isequal (a, v)) - a = [v; []; []]; - assert (isequal (a, v)) -***** xtest - % FIXME: is this Octave bug? worth worrying about - syms x - a = [x; [] []]; - assert (isequal (a, x)) -!!!!! known failure -octave_base_value::map_value(): wrong type argument 'null_matrix' -***** test - % more empty vectors - v = [sym(1) sym(2)]; - q = sym(ones(0, 2)); - assert (isequal ([v; q], v)) -***** error - v = [sym(1) sym(2)]; - q = sym(ones(0, 3)); - w = vertcat(v, q); -***** test - % Octave 3.6 bug: should pass on 3.8.1 and matlab - a = [sym(1) 2]; - assert (isequal ( [a; [3 4]] , [1 2; 3 4] )) - assert (isequal ( [a; sym(3) 4] , [1 2; 3 4] )) - % more examples - syms x - [x [x x]; x x x]; - [[x x] x; x x x]; - [[x x] x; [x x] x]; - [x x x; [x x] x]; -***** test - % issue #700 - A = sym ([1 2]); - B = simplify (A); - assert (isequal ([B; A], [A; B])) -11 tests, 10 passed, 1 known failure, 0 skipped -[inst/@sym/inv.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/inv.m +[inst/@sym/besselk.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselk.m ***** test - % scalar - syms x - assert (isequal (inv(x), 1/x)) + X = [1 2 3; 4 5 6]; + ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; + n = double(ns); + A = double(besselk(ns, X)); + B = besselk(n, X); + assert (all (all (abs (A - B) < 2*eps*abs(A)))) ***** test - % diagonal + % roundtrip syms x - A = [sym(1) 0; 0 x]; - B = [sym(1) 0; 0 1/x]; - assert (isequal (inv(A), B)) -***** test - % 2x2 inverse - A = [1 2; 3 4]; - assert (max (max (abs (double (inv (sym (A))) - inv(A)))) <= 3*eps) -***** error - syms a; - A = [a a; a a]; - inv(A) -***** error - syms a; - A = [a a]; - inv(A) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/psi.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/psi.m -***** assert (isequal (psi (sym (1)), -eulergamma)) -***** assert (isequal (psi (1, sym (1)), sym (pi)^2/6)) -***** assert (isinf (psi (sym ('inf')))) -***** test - % compare to Maple: evalf(Psi(-101/100)); - maple = vpa ('100.3963127058453949545769053445198842332424', 40); - us = vpa (psi (sym (-101)/100), 40); - assert (abs(double(maple-us)) < 1e-39) -***** test - % compare to Maple: evalf(Psi(1, 3*I-2)); - maple = vpa ('-0.1651414829219882371561038184133243839778799', 40) - ... - vpa ('0.1960040752985823275302034466611711263617296j', 40); - us = vpa (psi (1, sym (-2) + sym(3i)), 40); - assert (abs(double(maple-us)) < 1e-39) -***** test - % should match @double/psi - if (exist ('psi','builtin')) - assert (psi (pi), double (psi (sym (pi))), -3*eps) - assert (psi (100), double (psi (sym (100))), -3*eps) - assert (psi (1e-3), double (psi (1/sym (1e3))), -3*eps) - if (exist ('OCTAVE_VERSION', 'builtin')) - % 2014a doesn't support negative or complex arguments - assert (psi (-1.5), double (psi (sym (-3)/2)), -3*eps) - assert (psi (-8.3), double (psi (sym (-83)/10)),-4*eps) - assert (psi (2i), double (psi (sym (2i))), -3*eps) - assert (psi (10i+3), double (psi (sym (10i)+3)), -3*eps) - end - end -***** test - % @double/psi loses accuracy near the poles: note higher rel tol - if (exist ('psi','builtin')) - if (exist ('OCTAVE_VERSION', 'builtin')) - assert (psi (-1.1), double (psi (sym (-11)/10)), -6*eps) - assert (psi (-1.01), double (psi (sym (-101)/100)), -50*eps) - end - end -***** test - if (exist ('psi','builtin')) - assert (psi (1, pi), double (psi (1, sym (pi))), -3*eps) - assert (psi (1, 100), double (psi (1, sym (100))), -3*eps) - assert (psi (1, 1e-4), double (psi (1, 1/sym (1e4))), -3*eps) - end -***** test - if (exist ('psi','builtin')) - assert (psi (2, pi), double (psi (2, sym (pi))), -3*eps) - assert (psi (2, 1000), double (psi (2, sym (1000))), -3*eps) - assert (psi (2, 1e-4), double (psi (2, 1/sym (1e4))), -3*eps) - end + A = besselk(2, 10); + q = besselk(2, x); + h = function_handle(q); + B = h(10); + assert (abs (A - B) <= eps*abs(A)) +***** error besselk(sym('x')) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/linspace.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/linspace.m ***** test - % round trip - if (exist ('psi','builtin')) - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - f = psi (x); - h = function_handle (f); - A = h (1.1); - B = psi (1.1); - assert (A, B) - end - end -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@sym/csc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/csc.m -***** error csc (sym(1), 2) -***** assert (isequaln (csc (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); + a = linspace(sym(3), 5, 5); + b = [sym(6) 7 8 9 10]/2; + assert (isequal (a, b)) ***** test - f1 = csc(x); - f2 = csc(d); - assert( abs(double(f1) - f2) < 1e-15 ) + % non-integers + A = linspace(0, sym(pi), 10); + assert (length (A) == 10); + assert (isequal (A(6), 5*sym(pi)/9)); ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = csc(A); - f2 = csc(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % default argument for N + A = linspace(1, 100); + assert (length (A) == 100); ***** test - % round trip - y = sym('y'); - A = csc (d); - f = csc (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/sech.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sech.m -***** error sech (sym(1), 2) -***** assert (isequaln (sech (sym(nan)), sym(nan))) + % special case for just N = 1 + A = linspace(sym(2), 3, 1); + assert (isequal (A, 3)) + A = linspace(sym(2), 3, 0); + assert (isequal (A, 3)) + A = linspace(sym(2), 3, sym(3)/2); + assert (isequal (A, 3)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/csch.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/csch.m +***** error csch (sym(1), 2) +***** assert (isequaln (csch (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = sech(x); - f2 = sech(d); + f1 = csch(x); + f2 = csch(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = sech(A); - f2 = sech(D); + f1 = csch(A); + f2 = csch(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = sech (d); - f = sech (y); + A = csch (d); + f = csch (y); h = function_handle (f); B = h (d); assert (A, B, -eps) end 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/rref.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rref.m -***** test - A = sym([1 2; 3 4]); - [r, k] = rref(A); - assert (isequal (r, eye(2))) - assert (isequal (k, [1 2])) -***** assert (isequal (rref(sym([2 1])), [1 sym(1)/2])) -***** assert (isequal (rref(sym([1 2; 2 4])), [1 2; 0 0])) -***** assert (isequal (rref(sym([0 0; 2 4])), [1 2; 0 0])) -***** test - A = sym([1 2 3; 2 3 4]); - [r, k] = rref(A); - assert (isequal (r, [1 0 -1; 0 1 2])) - assert (isequal (k, [1 2])); -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/mpower.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/mpower.m -***** test - syms x - assert(isequal(x^(sym(4)/5), x.^(sym(4)/5))) -***** test - % integer powers of scalars - syms x - assert (isequal (x^2, x*x)) - assert (isequal (x^sym(3), x*x*x)) -***** test - % array ^ integer - syms x y - A = [x 2; y 4]; - assert (isequal (A^2, A*A)) - assert (isequal (simplify(A^3 - A*A*A), [0 0; 0 0])) -***** test - % array ^ rational - Ad = [1 2; 0 3]; - A = sym(Ad); - B = A^(sym(1)/3); - Bd = Ad^(1/3); - assert (max(max(abs(double(B) - Bd))) < 1e-14) -***** test - % non-integer power - A = sym([1 2; 0 3]); - B = A^pi; - C = [1 -1+3^sym(pi); 0 sym(3)^pi]; - assert (isequal (B, C)) -***** test - % matpow - syms n - A = sym([1 2; 3 4]); - B = A^n; - C = 10 + B + B^2; - D = subs(C, n, 1); - E = 10 + A + A^2; - assert (isequal (simplify(D), simplify(E))) -***** test - % matpow, sub in zero gives identity - A = sym([1 2; 0 3]); - syms n; - B = A^n; - C = subs(B, n, 1); - assert (isequal (C, A)) - C = subs(B, n, 0); - assert (isequal (C, sym(eye(2)))) -***** test - % scalar^array works in SymPy > 1.0.0, otherwise not implemented - syms x - A = [1 2; 3 4]; - try - B = x^A; - waserr = false; - catch - waserr = true; - notimpl = any (strfind (lasterr (), 'NotImplementedError')); - end - assert ((~ waserr && strcmp (regexprep (disp (B, 'flat'), '\s+', ''), 'x**Matrix([[1,2],[3,4]])')) || (waserr && notimpl)) -***** error - A = sym([1 2; 3 4]); - B = A^A; -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/double.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/double.m -***** test - % numeric scalar - a = double(sym(10)); - assert (a == 10) - assert (isa (a, 'double')) -***** test - % numeric vectors - a = double(sym([10 12])); - assert (isequal (a, [10 12])) - assert (isa (a, 'double')) -***** test - % complex - a = 3 + 4i; - b = sym(a); - assert (isequal (double (b), a)) -***** xtest - % unexpected, precisely same floating point - a = 3 + 4i; - b = sym(a); - assert (isequal (double (b/pi), a/pi)) -***** test - % floating point - x = sqrt(sym(2)); - assert( abs(double(x) - sqrt(2)) < 2*eps) - x = sym(pi); - assert( abs(double(x) - pi) < 2*eps) -***** test - oo = sym(inf); - assert( double(oo) == inf ) - assert( double(-oo) == -inf ) - assert( isnan(double(0*oo)) ) -***** test - zoo = sym('zoo'); - assert (double(zoo) == complex(inf, inf)) -***** test - zoo = sym('zoo'); - assert (double(-zoo) == double(zoo) ) - assert( isnan(double(0*zoo)) ) -***** test - % nan - snan = sym(nan); - assert( isnan(double(snan))) -***** test - % don't want NaN+NaNi - snan = sym(nan); - assert (isreal (double (snan))) -***** test - % arrays - a = [1 2; 3 4]; - assert( isequal( double(sym(a)), a )) - assert( isequal( double(sym(a)), a )) - % should fail with error for non-double -***** error syms x; double(x) -***** error syms x; double([1 2 x]) -13 tests, 13 passed, 0 known failure, 0 skipped -[inst/@sym/ccode.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ccode.m -***** shared x,y,z - syms x y z -***** test - % basic test - f = x*sin(y) + abs(z); - source = ccode(f); - expected = 'x*sin(y) + fabs(z)'; - assert(strcmp(source, expected)) -***** test - % output test - f = x*sin(y) + abs(z); - [C, H] = ccode(f, 'file', '', 'show_header', false); - expected_c_code = sprintf('#include \"file.h\"\n#include \n\ndouble myfun(double x, double y, double z) {\n\n double myfun_result;\n myfun_result = x*sin(y) + fabs(z);\n return myfun_result;\n\n}\n'); - expected_h_code = sprintf('\n#ifndef PROJECT__FILE__H\n#define PROJECT__FILE__H\n\ndouble myfun(double x, double y, double z);\n\n#endif\n\n'); - assert(strcmp(C.name, 'file.c')) - assert(strcmp(H.name, 'file.h')) - hwin = strrep(expected_h_code, sprintf('\n'), sprintf('\r\n')); - assert (strcmp (H.code, expected_h_code) || strcmp (H.code, hwin)) - s1 = expected_c_code; - s2 = strrep(expected_c_code, sprintf('\n'), sprintf('\r\n')); - assert (strcmp (C.code, s1) || strcmp (C.code, s2)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/invhilb.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/invhilb.m -***** test - A = invhilb(sym(3)); - B = sym([9 -36 30;-36 192 -180;30 -180 180]); - assert( isequal( A, B)) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/isempty.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isempty.m -***** shared se, a - se = sym ([]); - a = sym ([1 2]); -***** assert (~isempty (sym (1))) -***** assert (isempty (sym (se))) -***** assert (isempty (se == [])) -***** test -***** test se(1) = 10; -***** test assert ( isa (se, 'sym')) -***** test assert ( isequal (se, 10)) -***** shared -***** test - % empty matrices - A = sym('A', [3 0]); - assert (isempty (A)) - A = sym(ones(3,0)); - assert (isempty (A)) -***** test - % non-empty symbolic-size matrices - syms n integer - A = sym('A', [3 n]); - assert (~isempty (A)) -***** xtest - % empty symbolic-size matrices - % FIXME: will fail until size stop lying by saying 1x1 - syms n integer - A = sym('A', [0 n]); - assert (isempty (A)) - A = sym('A', [n 0]); - assert (isempty (A)) -!!!!! known failure -assert (isempty (A)) failed -10 tests, 9 passed, 1 known failure, 0 skipped -[inst/@sym/lhs.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/lhs.m -***** test - syms x y - f = x + 1 == 2*y; - assert (isequal (lhs(f), x + 1)) - assert (isequal (rhs(f), 2*y)) -***** test - syms x y - f = x + 1 < 2*y; - assert (isequal (lhs(f), x + 1)) - assert (isequal (rhs(f), 2*y)) -***** test - syms x y - f = x + 1 >= 2*y; - assert (isequal (lhs(f), x + 1)) - assert (isequal (rhs(f), 2*y)) -***** test - syms x y - A = [x == y 2*x < 2*y; 3*x > 3*y 4*x <= 4*y; 5*x >= 5*y x < 0]; - L = [x 2*x; 3*x 4*x; 5*x x]; - R = [y 2*y; 3*y 4*y; 5*y 0]; - assert (isequal( lhs(A), L)) - assert (isequal( rhs(A), R)) -***** error - syms x - lhs(x) -***** error - lhs(sym(true)) -***** error - syms x - A = [1 + x == 2*x sym(6)]; - lhs(A) +[inst/@sym/isvector.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isvector.m +***** assert(isvector(sym('x'))) +***** assert(isvector(sym([1 2 3]))) +***** assert(isvector(sym([1; 2]))) +***** assert(~isvector(sym([1 2; 3 4]))) +***** assert(~isvector(sym([]))) +***** assert(isvector(sym(ones(1,0)))) +***** assert(~isvector(sym(ones(0,3)))) 7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/zeta.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/zeta.m -***** error zeta (sym(1), 2, 3) -***** assert (isequaln (zeta (sym(nan)), sym(nan))) -***** test - f1 = zeta (sym(2)); - f2 = pi^2/6; - assert (double (f1), f2, -1e-15) -***** test - A = sym([0 2; 4 6]); - f1 = zeta (A); - f2 = [-1/2 pi^2/6; pi^4/90 pi^6/945]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - f = zeta (y); - h = function_handle (f); - A = zeta (2); - B = h (2); - assert (A, B, -eps) - end -***** xtest - % https://github.com/sympy/sympy/issues/11802 - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - assert (double (zeta (sym (3), 4)), -0.07264084989132137196, -1e-14) - end -!!!!! known failure -Python exception: RecursionError: maximum recursion depth exceeded in __instancecheck__ - occurred at line 6 of the Python code block: - x = complex(x) -***** test - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms x - assert (isequal (zeta (0, x), zeta(x))) - end -***** test - % ensure its the nth deriv wrt x, not the n deriv - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms x n - F = zeta (n, x); - F = subs(F, n, 3); - assert (isequal (F, diff (zeta (x), x, x, x))) - end -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/tanh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/tanh.m -***** error tanh (sym(1), 2) -***** assert (isequaln (tanh (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = tanh(x); - f2 = tanh(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = tanh(A); - f2 = tanh(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = tanh (d); - f = tanh (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/isconstant.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isconstant.m -***** test - syms x - A = [x 2 3]; - B = [false true true]; - assert (isequal (isconstant(A), B)) -***** test - syms x - A = [x 2; 3 x]; - B = [false true; true false]; - assert (isequal (isconstant(A), B)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/pinv.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/pinv.m -***** test - % scalar - syms x - assert (isequal (pinv(x), 1/x)) -***** test - % 2x3 - A = [1 2 3; 4 5 6]; - assert (max (max (abs (double (pinv (sym (A))) - pinv(A)))) <= 10*eps) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/logint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/logint.m -***** error logint (sym(1), 2) -***** xtest - assert (isequaln (logint (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (logint (sym (nan)), sym (nan))) failed -***** shared x, d - d = 2; - x = sym('2'); -***** test - f1 = logint(x); - f2 = 1.045163780117492784845; - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = logint(A); - f2 = 1.045163780117492784845; - f2 = [f2 f2; f2 f2]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = logint (d); - f = logint (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) - end -5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/fortran.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/fortran.m -***** shared x,y,z - syms x y z -***** test - % basic test - f = x*sin(y) + abs(z); - source = fortran(f); - expected = ' x*sin(y) + abs(z)'; - s1 = strrep (expected, 'abs', 'Abs'); - assert (strcmp (source, expected) || strcmp (source, s1)) -***** test - % output test - f = x*sin(y) + abs(z); - [F,H] = fortran(f, 'file', '', 'show_header', false); - expected_h_code = sprintf('\ninterface\nREAL*8 function myfun(x, y, z)\nimplicit none\nREAL*8, intent(in) :: x\nREAL*8, intent(in) :: y\nREAL*8, intent(in) :: z\nend function\nend interface\n\n'); - expected_f_code = sprintf('\nREAL*8 function myfun(x, y, z)\nimplicit none\nREAL*8, intent(in) :: x\nREAL*8, intent(in) :: y\nREAL*8, intent(in) :: z\n\nmyfun = x*sin(y) + abs(z)\n\nend function\n'); - assert(strcmp(F.name, 'file.f90')) - assert(strcmp(H.name, 'file.h')) - %disp(expected_f_code); disp(F.code) - s1 = strrep (expected_f_code, 'abs', 'Abs'); - s2 = strrep (expected_f_code, sprintf ('\n'), sprintf ('\r\n')); - s3 = strrep (s2, 'abs', 'Abs'); - s4 = strrep (expected_h_code, sprintf ('\n'), sprintf ('\r\n')); - assert (strcmp (F.code, expected_f_code) || strcmp (F.code, s1) || strcmp (F.code, s2) || strcmp (F.code, s3)) - assert (strcmp (H.code, expected_h_code) || strcmp (H.code, s4)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/acot.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acot.m -***** error acot (sym(1), 2) -***** assert (isequaln (acot (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = acot(x); - f2 = acot(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = acot(A); - f2 = acot(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = acot (d); - f = acot (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/uplus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/uplus.m -***** test - syms x - assert (isa (+x, 'sym')) - assert (isequal (+x, x)) -***** test - A = sym([0 -1 inf]); - assert( isequal ( +A, A)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/eye.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/eye.m -***** test - y = eye(sym(2)); - x = [1 0; 0 1]; - assert( isequal( y, sym(x))) -***** test - y = eye(sym(2), 1); - x = [1; 0]; - assert( isequal( y, sym(x))) -***** test - y = eye(sym(1), 2); - x = [1 0]; - assert( isequal( y, sym(x))) -***** assert( isa( eye(sym(2), 'double'), 'double')) -***** assert( isa( eye(3, sym(3), 'single') , 'single')) -***** assert( isa( eye(3, sym(3)), 'sym')) -***** assert( isa( eye(3, sym(3), 'sym'), 'sym')) -***** xtest - % Issue #13 - assert( isa( eye(3, 3, 'sym'), 'sym')) -!!!!! known failure -invalid data type specified -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/logspace.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/logspace.m -***** test - % default argument for N - A = logspace(0, 2); - assert (length (A) == 50); -***** test - % special case: pi as end pt - A = logspace(-sym(3), sym(pi), 3); - assert (isequal (A(end), sym(pi))) -***** test - A = logspace(-sym(4), 0, 3); - B = [sym(1)/10000 sym(1)/100 sym(1)]; - assert (isequal (A, B)) -***** test - % vpa support, might need recent sympy for sympy issue #10063 - n = 32; - A = logspace(-vpa(1,n), 0, 3); - B = [10^(-vpa(1,n)) 10^(-vpa(sym(1)/2,n)) vpa(1,n)]; - assert (isequal (A, B)) - assert (max(abs(double(A) - logspace(-1, 0, 3))) < 1e-15) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/erf.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/erf.m -***** error erf (sym(1), 2) -***** assert (isequaln (erf (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = erf(x); - f2 = erf(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = erf(A); - f2 = erf(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = erf (d); - f = erf (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/function_handle.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/function_handle.m ***** shared x,y,z @@ -9189,7 +9809,7 @@ % remove temp_path from load path rmpath(temp_path); -Wrote file /tmp/oct_GuPm5R.m. +Wrote file /tmp/oct_gWFnVC.m. ***** test % output to disk: also works with .m specified if (exist ('OCTAVE_VERSION', 'builtin')) @@ -9214,7 +9834,7 @@ end % remove temp_path from load path rmpath(temp_path); -Wrote file /tmp/oct_UEshEP.m. +Wrote file /tmp/oct_hdAImI.m. ***** test % non-scalar outputs H = [x y z]; @@ -9252,7 +9872,7 @@ end % remove temp_path from load path rmpath(temp_path); -Wrote file /tmp/oct_VUXUd8.m. +Wrote file /tmp/oct_GKkDjF.m. ***** test % order of outputs is lexiographic syms a A x y @@ -9266,296 +9886,6 @@ assert (f (1), complex (1, sqrt (3)), -eps) end 14 tests, 14 passed, 0 known failure, 0 skipped -[inst/@sym/ifourier.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ifourier.m -***** error ifourier (sym(1), 2, 3, 4) -***** test - % matlab SMT compat - syms t r u x w - Pi=sym('pi'); - assert(logical( ifourier(exp(-abs(w))) == 1/(Pi*(x^2 + 1)) )) - assert(logical( ifourier(exp(-abs(x))) == 1/(Pi*(t^2 + 1)) )) - assert(logical( ifourier(exp(-abs(r)),u) == 1/(Pi*(u^2 + 1)) )) - assert(logical( ifourier(exp(-abs(r)),r,u) == 1/(Pi*(u^2 + 1)) )) -***** test - % basic - syms x w - Pi=sym('pi'); - assert(logical( ifourier(exp(-w^2/4)) == 1/(sqrt(Pi)*exp(x^2)) )) - assert(logical( ifourier(sqrt(Pi)/exp(w^2/4)) == exp(-x^2) )) -***** test - % Dirac delta tests - syms x w - Pi=sym('pi'); - assert(logical( ifourier(dirac(w-2)) == exp(2*1i*x)/(2*Pi) )) - assert (logical( ifourier(sym(2), w, x) == 2*dirac(x) )) -***** test - % advanced test - syms x w c d - Pi=sym('pi'); - f=(Pi*(dirac(x-c)+dirac(x+c))+2*Pi*1i*(-dirac(x+3*d)+dirac(x-3*d))+2/(x^2+1))/(2*Pi); - assert(logical( simplify(ifourier(cos(c*w)+2*sin(3*d*w)+exp(-abs(w)))-f) == 0 )) -***** xtest - % Inverse Fourier transform cannot recover non-smooth functions - % SymPy cannot evaluate correctly?? - syms x w - assert(logical( ifourier(2/(w^2 + 1)) == exp(-abs(x)) )) - assert(logical( ifourier(2/(w^2 + 1)) == heaviside(x)/exp(x) + heaviside(-x)*exp(x) )) - assert(logical( ifourier(-(w*4)/(w^4 + 2*w^2 + 1) )== -x*exp(-abs(x))*1i )) - assert(logical( ifourier(-(w*4)/(w^4 + 2*w^2 + 1) )== -x*(heaviside(x)/exp(x) + heaviside(-x)*exp(x))*1i )) -!!!!! known failure -assert (logical (ifourier (2 / (w ^ 2 + 1)) == exp (-abs (x)))) failed -***** error ifourier (sym('k', 'positive')*sym('k')) -***** test - % SMT compact, prefers k over symvar - syms k x y - assert (isequal (ifourier(y*exp(-k^2/4)), y/sqrt(sym(pi))*exp(-x^2))) -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/simplify.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/simplify.m -***** shared x,p,q - syms x - p = x^2 + x + 1; - q = horner (p); -***** assert(~isequal( p - q, 0)) -***** assert(isequal( simplify(p - q), 0)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/setxor.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/setxor.m -***** test - A = sym([1 2 3]); - B = sym([1 2 4]); - C = setxor(A, B); - D1 = sym([3 4]); - D2 = sym([4 3]); - assert (isequal (C, D1) || isequal (C, D2)) -***** test - % one nonsym - A = sym([1 2 3]); - B = [1 2 4]; - C = setxor(A, B); - D1 = sym([3 4]); - D2 = sym([4 3]); - assert (isequal (C, D1) || isequal (C, D2)) -***** test - % empty - A = sym([1 2 3]); - C = setxor(A, A); - assert (isempty (C)) -***** test - % empty input - A = sym([1 2]); - C = setxor(A, []); - assert (isequal (C, A) || isequal (C, sym([2 1]))) -***** test - % scalar - syms x - assert (isequal (setxor([x 1], x), sym(1))) - assert (isempty (setxor(x, x))) -***** test - A = interval(sym(1), 3); - B = interval(sym(2), 5); - C = setxor(A, B); - D = union (interval (sym(1), 2, false, true), interval (sym(3), 5, true, false)); - assert( isequal( C, D)) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/le.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/le.m -***** test - % simple - x = sym(1); y = sym(1); e = x <= y; - assert (logical (e)) - x = sym(1); y = sym(2); e = x <= y; - assert (logical (e)) -***** test - % array -- array - syms x - a = sym([1 3 3 2*x]); - b = sym([2 x 3 10]); - e = a <= b; - assert (isa (e, 'sym')) - assert (logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 3 <= x)) - assert (logical (e(3))) - assert (isa (e(4), 'sym')) - assert (isequal (e(4), 2*x <= 10)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/mtimes.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/mtimes.m -***** test - % scalar - syms x - assert (isa (x*2, 'sym')) - assert (isequal (2*sym(3), sym(6))) - assert (isequal (sym(2)*3, sym(6))) -***** test - % matrix-scalar - D = [0 1; 2 3]; - A = sym(D); - assert (isa (2*A, 'sym')) - assert (isequal ( 2*A , 2*D )) - assert (isequal ( A*2 , 2*D )) -***** test - % matrix-matrix - D = [0 1; 2 3]; - A = sym(D); - assert (isa (A*A, 'sym')) - assert (isequal ( A*A , D*D )) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/dot.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/dot.m -***** error dot (sym(1), 2, 3) -***** test - a = sym([1; 1; 0]); - b = sym([1; 2; 4]); - c = dot(a, b); - assert (isequal (c, sym(3))) -***** test - syms x - a = sym([x; 0; 0]); - b = sym([0; 1; 0]); - c = dot(a, b); - assert (isequal (c, sym(0))) -***** test - assert (isequal (dot (sym([1 i]), sym([i 2])), sym(-i))) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/expint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/expint.m -***** test - f1 = expint(sym(1)); - f2 = expint(1); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - f1 = expint(sym(1i)); - f2 = expint(1i); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [1 2; 3 4]; - A = sym(D); - f1 = expint(A); - f2 = expint(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - syms x - A = expint(x); - B = expint(1, x); - assert (isequal (A, B)) -***** test - syms x - A = exp(-x)/x; - B = expint(0, x); - assert (isequal (A, B)) -***** error expint(sym(1), 2, 3) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - syms x - A = expint (3); - f = expint (x); - h = function_handle (f); - B = h (3); - assert (A, B, -eps) - end -***** error - % round trip - syms n x - f = expint (n, x); - h = function_handle (f); -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/log10.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/log10.m -***** assert (isequal (log10 (sym (1000)), sym (3))) -***** assert (isequal (log10 (sym ([10 100])), sym ([1 2]))) -***** test - % round-trip - syms x - f = log10 (x); - h = function_handle (f); - A = h (1.1); - B = log10 (1.1); - assert (A, B, -eps) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/rhs.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rhs.m -***** test - syms x - f = x + 1 == 2*x; - assert (isequal (rhs(f), 2*x)) -***** error - syms x - rhs(x) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/acosd.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acosd.m -***** error acosd (sym(1), 2) -***** assert (isequaln (acosd (sym(nan)), sym(nan))) -***** test - f1 = acosd (sym(1)/2); - f2 = acosd (1/2); - assert (double (f1), f2, -eps) -***** test - D = [1 2; 3 4]/4; - A = sym([1 2; 3 4])/4; - f1 = acosd (A); - f2 = acosd (D); - assert (double (f1), f2, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/isfinite.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isfinite.m -***** assert (isfinite(sym(1))) -***** assert (isfinite(sym(-10))) -***** assert (~isfinite(sym('oo'))) -***** assert (~isfinite(sym('-oo'))) -***** assert (~isfinite(sym(1)/0)) -***** assert (~isfinite(sym(nan))) -***** assert (isequal (isfinite (sym ([1 inf])), [true false])) -***** test - % finite-by-assumption - syms x finite - assert (isfinite (x)) -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/bernoulli.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/bernoulli.m -***** error bernoulli (sym(1), 2, 3) -***** assert (isequal (bernoulli (sym(8)), -sym(1)/30)) -***** assert (isequal (bernoulli (sym(9)), sym(0))) -***** test syms x - assert (isequal (bernoulli(3,x), x^3 - 3*x^2/2 + x/2)) -***** test - m = sym([0 1; 8 888889]); - A = bernoulli (m); - B = [1 -sym(1)/2; -sym(1)/30 0]; - assert (isequal (A, B)) -***** test - syms x - A = bernoulli ([0; 1], x); - B = [sym(1); x - sym(1)/2]; - assert (isequal (A, B)) -***** test - % round trip - if (python_cmd('return Version(spver) > Version("1.2")')) - syms n x - f = bernoulli (n, x); - h = function_handle (f, 'vars', [n x]); - A = h (2, 2.2); - B = bernoulli (2, 2.2); - assert (A, B) - end -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/char.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/char.m -***** test - % issue #91: expose as string - a = sym(pi); - assert (strcmp (char (a), 'pi')) -***** shared x - x = sym('x'); -***** assert (strcmp (char (x), 'x')) -***** assert (strcmp (char (2*x), '2*x')) -***** assert (strcmp (char ([2*x x]), 'Matrix([[2*x, x]])')) -***** assert (strcmp (char ([2*x 2; 1 x]), 'Matrix([[2*x, 2], [1, x]])')) -5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/sec.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/sec.m ***** error sec (sym(1), 2) @@ -9582,402 +9912,254 @@ B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/matlabFunction.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/matlabFunction.m -***** test - % autodetect inputs - syms x y - s = warning('off', 'OctSymPy:function_handle:nocodegen'); - h = matlabFunction(2*x*y, x+y); - warning(s) - [t1, t2] = h(3,5); - assert(t1 == 30 && t2 == 8) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/prevprime.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/prevprime.m -***** assert (isequal (prevprime(sym(3)), 2)); -***** assert (isequal (prevprime(sym(20)), 19)); -***** assert (isequal (prevprime(sym([3 5 10])), [2 3 7])); -***** error prevprime(sym(2)) -***** error prevprime(sym(-2)) -***** test - % result is a sym - p = prevprime(sym(3)); - assert (isa (p, 'sym')) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/logical.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/logical.m -***** test - % basics, many others in isAlways.m - assert (logical(true)) - assert (~(logical(false))) -***** test - % numbers to logic? - assert (logical(sym(1))) - assert (logical(sym(-1))) - assert (~logical(sym(0))) -***** test - % eqns, "structurally equivalent" - syms x - e = logical(x == x); - assert ( islogical (e)) - assert (e) - e = logical(x == 1); - assert ( islogical (e)) - assert (~e) -***** test - % eqn could have solutions but are false in general - syms x - e = logical(x^2 == x); - assert ( islogical (e)) - assert (~e) - e = logical(2*x == x); - assert ( islogical (e)) - assert (~e) -***** test - % FIXME: (not sure yet) T/F matrices should stay sym until logical() - a = sym(1); - e = a == a; - assert (isa (e, 'sym')) - assert (islogical (logical (e))) - e = [a == a a == 0 a == a]; - assert (isa (e, 'sym')) - assert (islogical (logical (e))) -***** test - % sym vectors of T/F to logical - a = sym(1); - e = [a == a a == 0 a == a]; - w = logical(e); - assert (islogical (w)) - assert (isequal (w, [true false true])) - e = e'; - w = logical(e); - assert (islogical (w)) - assert (isequal (w, [true; false; true])) -***** test - % sym matrix of T/F to logical - a = sym([1 2 3; 4 5 6]); - b = sym([1 2 0; 4 0 6]); - e = a == b; - w = logical(e); - assert (islogical (w)) - assert (isequal (w, [true true false; true false true])) -***** error - syms x - logical(x); -***** error - logical(sym(nan)) +[inst/@sym/gammaln.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/gammaln.m +***** assert (isequal (gammaln (sym (3)), log (sym (2)))) +***** assert (isequal (gammaln (sym (10)), log (gamma (sym (10))))) ***** test - % but oo and zoo are non-zero so we call those true - % (SMT errors on these) FIXME - syms oo zoo - assert (logical (oo)) - % assert (logical (zoo)) -***** xtest - % FIXME: bug in Octave: if should automatically use logical - % (want "if (obj)" same as "if (logical(obj))") - e = sym(true); - if (e) - assert(true); - else - assert(false); - end -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/coshint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/coshint.m -***** error coshint (sym(1), 2) -***** xtest - assert (isequaln (coshint (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (coshint (sym (nan)), sym (nan))) failed -***** shared x, d - d = 1; - x = sym('1'); + % compare to Maple: evalf(lnGAMMA(Pi)); + maple = vpa ('0.827694592323437101529578558452359951153502', 40); + us = vpa (gammaln (sym(pi)), 40); + assert (abs(double(maple-us)) < 1e-39) ***** test - f1 = coshint(x); - f2 = 0.8378669409802082408947; - assert( abs(double(f1) - f2) < 1e-15 ) + % compare to Maple: evalf(lnGAMMA(3+2*I)); + maple = vpa ('-0.0316390593739611898037677296008797172022603', 40) + ... + vpa ('2.02219319750132712401643376238334982100512j', 40); + us = vpa (gammaln (sym(3) + 2i), 40); + assert (abs(double(maple-us)) < 1e-39) ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = coshint(A); - f2 = 0.8378669409802082408947; - f2 = [f2 f2; f2 f2]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % compare to Maple: evalf(lnGAMMA(-1.5)); + % notably, @double/gammaln has zero imag part + maple = vpa ('0.8600470153764810145109326816703567873271571', 40) - ... + vpa ('6.2831853071795864769252867665590057683943388j', 40); + us = vpa (gammaln (-sym(3)/2), 40); + assert (abs(double(maple-us)) < 1e-39) +***** assert (gammaln (pi), double (gammaln (sym (pi))), -3*eps) +***** assert (gammaln (100), double (gammaln (sym (100))), -3*eps) +***** assert (gammaln (1e-3), double (gammaln (1/sym (1e3))), -100*eps) ***** test % round trip if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = coshint (d); - f = coshint (y); + syms x + f = gammaln (x); h = function_handle (f); - B = h (d); - assert (A, B, -eps) + A = h (1.1); + B = gammaln (1.1); + assert (A, B) end -5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/linspace.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/linspace.m +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/equationsToMatrix.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/equationsToMatrix.m ***** test - a = linspace(sym(3), 5, 5); - b = [sym(6) 7 8 9 10]/2; - assert (isequal (a, b)) + syms x y z + [A, B] = equationsToMatrix ([x + y - z == 1, 3*x - 2*y + z == 3, 4*x - 2*y + z + 9 == 0], [x, y, z]); + a = sym ([1 1 -1; 3 -2 1; 4 -2 1]); + b = sym ([1; 3; -9]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - % non-integers - A = linspace(0, sym(pi), 10); - assert (length (A) == 10); - assert (isequal (A(6), 5*sym(pi)/9)); + syms x y z + A = equationsToMatrix ([3*x + -3*y - 5*z == 9, 4*x - 7*y + -3*z == -1, 4*x - 9*y - 3*z + 2 == 0], [x, y, z]); + a = sym ([3 -3 -5; 4 -7 -3; 4 -9 -3]); + assert (isequal (A, a)) ***** test - % default argument for N - A = linspace(1, 100); - assert (length (A) == 100); + syms x y + [A, B] = equationsToMatrix ([3*x + 9*y - 5 == 0, -8*x - 3*y == -2]); + a = sym ([3 9; -8 -3]); + b = sym ([5; -2]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - % special case for just N = 1 - A = linspace(sym(2), 3, 1); - assert (isequal (A, 3)) - A = linspace(sym(2), 3, 0); - assert (isequal (A, 3)) - A = linspace(sym(2), 3, sym(3)/2); - assert (isequal (A, 3)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/chebyshevT.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/chebyshevT.m -***** error chebyshevT (sym(1)) -***** error chebyshevT (sym(1), 2, 3) -***** assert (isequaln (chebyshevT (2, sym(nan)), sym(nan))) -***** shared x - syms x -***** assert(isequal(chebyshevT(0, x), sym(1))) -***** assert(isequal(chebyshevT(1, x), x)) -***** assert(isequal(chebyshevT(2, x), 2*x*x - 1)) -***** assert(isequal(chebyshevT([0 1 2], x), [sym(1) x (2*x*x-1)])) + % override symvar order + syms x y + [A, B] = equationsToMatrix ([3*x + 9*y - 5 == 0, -8*x - 3*y == -2], [y x]); + a = sym ([9 3; -3 -8]); + b = sym ([5; -2]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - syms n z - f = chebyshevT (n, z); - h = function_handle (f, 'vars', [n z]); - A = h (1.1, 2.2); - B = chebyshevT (1.1, 2.2); - assert (A, B) - end -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/interval.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/interval.m + syms x y z + [A, B] = equationsToMatrix ([x - 9*y + z == -5, -9*y*z == -5], [y, x]); + a = sym ([[-9 1]; -9*z 0]); + b = sym ([-5 - z; -5]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - a = interval(sym(1), 2); - assert (isa (a, 'sym')) + syms x y + [A, B] = equationsToMatrix (-6*x + 4*y == 5, 4*x - 4*y - 5, x, y); + a = sym ([-6 4; 4 -4]); + b = sym ([5; 5]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - % some set subtraction - a = interval(sym(0), 4); - b = interval(sym(0), 1); - c = interval(sym(1), 4, true); - q = a - b; - assert (isequal( q, c)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/adjoint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/adjoint.m + % vertical list of equations + syms x y + [A, B] = equationsToMatrix ([-6*x + 4*y == 5; 4*x - 4*y - 5], [x y]); + a = sym ([-6 4; 4 -4]); + b = sym ([5; 5]); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - syms x - A = [x x^2; x^3 x^4]; - B = [x^4 -x^2; -x^3 x]; - assert( isequal( adjoint(A), B )) -***** test syms x - assert( isequal( adjoint(x), 1)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/pretty.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/pretty.m + syms x y + [A, B] = equationsToMatrix (5*x == 1, y, x - 6*y - 7, y); + a = sym ([0; 1; -6]); + b = sym ([1 - 5*x; 0; -x + 7]); + assert (isequal (A, a)) + assert (isequal (B, b)) +***** error + syms x y + [A, B] = equationsToMatrix (x^2 + y^2 == 1, x - y + 1, x, y); ***** test - % simple + % single equation syms x - s1 = pretty(sin(x)); - s2 = sprintf(' sin(x)\n'); - assert (strcmp (s1, s2)) + [A, B] = equationsToMatrix (3*x == 2, x); + a = sym (3); + b = sym (2); + assert (isequal (A, a)) + assert (isequal (B, b)) ***** test - % force ascii + % single equation w/ symvar syms x - s1 = pretty(sin(x/2), 'ascii'); - s2 = sprintf(' /x\\\n sin|-|\n \\2/\n'); - swin = strrep(s1, sprintf('\r\n'), sprintf('\n')); - assert (strcmp (s1, s2) || strcmp (swin, s2)) + [A, B] = equationsToMatrix (3*x == 2); + a = sym (3); + b = sym (2); + assert (isequal (A, a)) + assert (isequal (B, b)) +***** error + if (python_cmd ('return Version(spver) <= Version("1.3")')) + error ('unique') + end + syms x + equationsToMatrix (3*x == 2, [x x]) +12 tests, 12 passed, 0 known failure, 0 skipped +[inst/@sym/cross.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cross.m +***** error cross (sym(1), 2, 3) +***** test + a = sym([1; 0; 0]); + b = sym([0; 1; 0]); + c = cross(a, b); + assert (isequal (c, sym([0; 0; 1]))) ***** test - % force unicode syms x - s1 = pretty(sin(x/2), 'unicode'); - s2 = sprintf(' ⎛x⎞\n sin⎜─⎟\n ⎝2⎠\n'); - swin = strrep(s1, sprintf('\r\n'), sprintf('\n')); - assert (strcmp (s1, s2) || strcmp (swin, s2)) + a = sym([x; 0; 0]); + b = sym([0; 1; 0]); + c = cross(a, b); + assert (isequal (c, sym([0; 0; x]))) 3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/ismember.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ismember.m -***** assert (ismember (2, interval(sym(0),2))) -***** assert (~ismember (3, interval(sym(0),2))) +[inst/@sym/ctranspose.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ctranspose.m ***** test - % something in a matrix - syms x - A = [1 x; sym(pi) 4]; - assert (ismember (sym(pi), A)) - assert (ismember (x, A)) - assert (~ismember (2, A)) + x = sym(1); + assert (isequal (x', x)) +***** assert (isempty (sym([])')) ***** test - % set - syms x - S = finiteset(2, sym(pi), x); - assert (ismember (x, S)) + % conjugate does nothing to real x + syms x real + assert (isequal (x', x)) ***** test - % set with positive symbol - syms p positive - S = finiteset(2, sym(pi), p); - assert (~ismember (-1, S)) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/lu.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/lu.m + % complex + syms x + assert (isequal (x', conj(x))) ***** test - % scalar - [l, u, p] = lu(sym(6)); - assert (isequal (l, sym(1))) - assert (isequal (u, sym(6))) - assert (isequal (p, sym(1))) + % complex array syms x - [l, u, p] = lu(x); - assert (isequal (l*u, p*x)) - [l, u] = lu(x); - assert (isequal (l*u, x)) + A = [x 2*x]; + B = [conj(x); 2*conj(x)]; + assert(isequal(A', B)) ***** test - % perm - A = sym(fliplr(2*eye(3))); - [L, U, P] = lu(A); - assert (isequal (L*U, P*A)) - [L, U, P] = lu(A, 'matrix'); - assert (isequal (L*U, P*A)) - [L, U, p] = lu(A, 'vector'); - assert (isequal (L*U, A(p,:))) - [L, U] = lu(A); - assert (isequal (L*U, A)) + A = [1 2; 3 4]; + assert(isequal( sym(A)' , sym(A') )) ***** test - % p is col vectpr - A = sym([0 2; 3 4]); - [L, U, p] = lu(A, 'vector'); - assert(iscolumn(p)) + A = [1 2] + 1i; + assert(isequal( sym(A)' , sym(A') )) ***** test - % simple matrix - A = [1 2; 3 4]; - B = sym(A); - [L, U, P] = lu(B); - assert (isequal (L*U, P*A)) - assert (isequal (U(2,1), sym(0))) - % needs pivot - A = [0 2; 3 4]; - B = sym(A); - [L, U, P] = lu(B); - [Ld, Ud, Pd] = lu(A); - assert (isequal (L*U, P*A)) - assert (isequal (U(2,1), sym(0))) - % matches regular LU - assert ( max(max(double(L)-Ld)) <= 10*eps) - assert ( max(max(double(U)-Ud)) <= 10*eps) - assert ( isequal (P, Pd)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/nnz.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/nnz.m -***** assert (nnz (sym ([1])) == 1) -***** assert (nnz (sym ([0])) == 0) -***** assert (nnz (sym ([])) == 0) -***** assert (nnz (sym ([1 0; 0 3])) == 2) + % true/false + t = sym(true); + f = sym(false); + assert (isequal ( t', t)) + assert (isequal ( f', f)) ***** test + % more true/false syms x - assert (nnz ([x 0]) == 1) -***** assert (nnz (sym (true)) == 1) -***** assert (nnz (sym (false)) == 0) -***** assert (nnz (sym (inf)) == 1) -***** assert (nnz (sym (nan)) == 1) + A = [x true 1i]; + B = [conj(x); true; -sym(1i)]; + assert (isequal ( A', B)) 9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/partfrac.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/partfrac.m -***** test - % basic - syms x y z - assert(logical( partfrac(y/(x + 2)/(x + 1),x) == -y/(x + 2) + y/(x + 1) )) - assert(logical( factor(partfrac(x^2/(x^2 - y^2),y)) == factor(x/(2*(x + y)) + x/(2*(x - y)) ))) - assert(logical( factor(partfrac(x^2/(x^2 - y^2),x)) == factor(-y/(2*(x + y)) + y/(2*(x - y)) + 1 ))) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/diag.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/diag.m +[inst/@sym/expm.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/expm.m ***** test % scalar syms x - assert (isequal (diag(x), x)) + assert (isequal (expm(x), exp(x))) ***** test - % row,col vec input - syms x - r = [1 x 2]; - c = [sym(1); x]; - assert (isequal (diag(diag(c)), c)) - assert (isequal (diag(c), [sym(1) 0; 0 x])) - assert (isequal (diag(diag(r)), r.')) - assert (isequal (diag(r), [sym(1) 0 0; 0 x 0; sym(0) 0 2])) + % diagonal + A = [sym(1) 0; 0 sym(3)]; + B = [exp(sym(1)) 0; 0 exp(sym(3))]; + assert (isequal (expm(A), B)) ***** test - % create matrix, kth diag - syms x - r = [1 x]; - z = sym(0); - assert (isequal (diag (x, 0), x)) - assert (isequal (diag (x, 1), [z x; z z])) - assert (isequal (diag (x, -1), [z z; x z])) - assert (isequal (diag (x, 2), [z z x; z z z; z z z])) - assert (isequal (diag (r, 1), [z 1 z; z z x; z z z])) + % diagonal w/ x + syms x positive + A = [sym(1) 0; 0 x+2]; + B = [exp(sym(1)) 0; 0 exp(x+2)]; + assert (isequal (expm(A), B)) ***** test - % extract kth diag - A = sym([1 2 3; 4 5 6]); - assert (isequal (diag(A), sym([1; 5]))) - assert (isequal (diag(A, 0), sym([1; 5]))) - assert (isequal (diag(A, 1), sym([2; 6]))) - assert (isequal (diag(A, 2), sym(3))) - assert (isequal (diag(A, -1), sym(4))) - assert (isempty (diag(A, -2))) - assert (isempty (diag(A, 3))) + % non-diagonal + syms x positive + A = [sym(1) 2; 0 x+2]; + B = expm(A); + C = double(subs(B, x, 4)); + D = expm(double(subs(A, x, 4))); + assert (max (max (abs (C - D))) <= 1e-11) 4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/limit.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/limit.m -***** error limit (sym(1), 2, 3, 4, 5) -***** shared x, oo +[inst/@sym/arg.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/arg.m +***** test syms x - oo = sym(inf); -***** assert (isa (limit(x, x, pi), 'sym')) -***** assert (isequal (limit(x, x, pi), sym(pi))) -***** assert (isequal (limit(sin(x)/x, x, 0), 1)) + assert (isequal (angle (x), arg (x))); +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/asech.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/asech.m +***** error asech (sym(1), 2) +***** assert (isequaln (asech (sym(nan)), sym(nan))) +***** shared x, d + d = 1/2; + x = sym('1/2'); ***** test - % left/right-hand limit - assert (isequal (limit(1/x, x, 0, 'right'), oo)) - assert (isequal (limit(1/x, x, 0), oo)) - assert (isequal (limit(1/x, x, 0, 'left'), -oo)) - assert (isequal (limit(1/x, x, oo), 0)) - assert (isequal (limit(sign(x), x, 0, 'left'), -1)) - assert (isequal (limit(sign(x), x, 0, 'right'), 1)) - assert (isequal (limit(sign(x), x, 0, '-'), -1)) - assert (isequal (limit(sign(x), x, 0, '+'), 1)) + f1 = asech(x); + f2 = asech(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % matrix - syms y - A = [x 1/x x*y]; - B = sym([3 sym(1)/3 3*y]); - assert (isequal (limit(A, x, 3), B)) + D = [d d; d d]; + A = [x x; x x]; + f1 = asech(A); + f2 = asech(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % omitting arguments - syms a - assert (isequal (limit(a), 0)) - assert (isequal (limit(a*x+a+2), a+2)) - assert (isequal (limit(a*x+a+2, 6), 7*a+2)) + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + y = sym('y'); + A = asech (d); + f = asech (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) + end +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/numel.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/numel.m ***** test - % constants - assert (isequal (limit(sym(6)), 6)) - assert (isequal (limit(sym(6), 7), 6)) - assert (isequal (limit([sym(6) sym(2)], 7), [6 2])) + a = sym([1 2 3]); + assert(numel(a) == 3); ***** test - % double constant, with sym limit - a = limit (6, sym(0)); - assert (isa (a, 'sym')) - assert (isequal (a, sym(6))) -9 tests, 9 passed, 0 known failure, 0 skipped + % 2D array + a = sym([1 2 3; 4 5 6]); + assert(numel(a) == 6); +***** test + % empty + a = sym([]); + assert(numel(a) == 0); +3 tests, 3 passed, 0 known failure, 0 skipped [inst/@sym/laplacian.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/laplacian.m ***** shared x,y,z @@ -10030,381 +10212,6 @@ ***** error laplacian(sym('x'), sym('x'), 42) ***** error laplacian([sym('x'), sym('x')]) 8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/expand.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/expand.m -***** test - syms x - assert (logical (x^2 + 6*x + 5 == expand ((x+5)*(x+1)))) - assert (isequal (x^2 + 6*x + 5, expand ((x+5)*(x+1)))) -***** test - % array - syms x - assert (isequal (expand ([x (x+1)*x]), [x x^2+x])) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/ge.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ge.m -***** test - % simple - x = sym(1); y = sym(1); e = x >= y; - assert (logical (e)) - x = sym(1); y = sym(2); e = x >= y; - assert (~logical(e)) -***** test - % array -- array - syms x - a = sym([1 3 3 2*x]); - b = sym([2 x 3 10]); - e = a >= b; - assert (isa (e, 'sym')) - assert (~logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 3 >= x)) - assert (logical (e(3))) - assert (isa (e(4), 'sym')) - assert (isequal (e(4), 2*x >= 10)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/ldivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ldivide.m -***** test - % scalar - syms x - assert (isa (x .\ 1, 'sym')) - assert (isa (x .\ x, 'sym')) - assert (isequal (x .\ 1, 1/x)) - assert (isequal (x .\ x, sym(1))) -***** test - % matrix-scalar - D = [1 1; 2 3]; - A = sym(D); - assert (isequal ( A .\ 6 , D .\ 6 )) - assert (isequal ( A .\ sym(6) , D .\ 6 )) - assert (isequal ( D .\ sym(6) , D .\ 6 )) -***** test - % matrix-matrix - D = [1 2; 3 4]; - A = sym(D); - assert (isequal ( A .\ A , D .\ D )) - assert (isequal ( A .\ D , D .\ D )) - assert (isequal ( D .\ A , D .\ D )) -***** test - % matrix .\ matrix with symbols - syms x y - A = [x y; x^2 2*y]; - B = [y x; x y]; - assert (isequal ( A .\ A , sym(ones(2, 2)) )) - assert (isequal ( B .\ A , [x/y y/x; x 2] )) -***** test - % scalar .\ matrix - D = 3*[1 2; 3 4]; - A = sym(D); - assert (isequal ( 3 .\ A , 3 .\ D )) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/arg.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/arg.m -***** test - syms x - assert (isequal (angle (x), arg (x))); -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/atanh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/atanh.m -***** error atanh (sym(1), 2) -***** assert (isequaln (atanh (sym(nan)), sym(nan))) -***** shared x, d - d = 1/2; - x = sym('1/2'); -***** test - f1 = atanh(x); - f2 = atanh(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = atanh(A); - f2 = atanh(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = atanh (d); - f = atanh (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/hypot.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/hypot.m -***** assert (isequal (hypot (sym(3), 4), sym(5))) -***** test - % compare to @double (note Matlab hypot only takes 2 inputs) - A = hypot (hypot ([1 2 3], [4 5 6]), [7 8 9]); - B = double (hypot (sym([1 2 3]), [4 5 6], [7 8 9])); - assert (A, B, -eps) -***** test - % compare to @double, with complex - A = hypot ([1+2i 3+4i], [1 3+1i]); - B = double (hypot (sym([1+2i 3+4i]), [1 3+1i])); - assert (A, B, -eps) -***** test - % matrices - x = sym([1 -2; 0 3]); - y = sym([0 0; 8 4]); - A = hypot (x, y); - B = sym([1 2; 8 5]); - assert (isequal (A, B)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/sind.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sind.m -***** error sind (sym(1), 2) -***** assert (isequaln (sind (sym(nan)), sym(nan))) -***** test - f1 = sind (sym(1)); - f2 = sind (1); - assert (double (f1), f2, -eps) -***** test - D = [10 30; 110 -45]; - A = sym(D); - f1 = sind (A); - f2 = sind (D); - assert (double (f1), f2, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/isscalar.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isscalar.m -***** assert(isscalar(sym('x'))) -***** test - a = sym([1 2 3]); - assert(~isscalar(a)) -***** assert(~isscalar(sym([]))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/ilaplace.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ilaplace.m -***** error ilaplace (sym(1), 2, 3, 4) -***** test - % basic SMT compact: no heaviside - syms s - syms t positive - assert (isequal (ilaplace(1/s^2), t)) - assert (isequal (ilaplace(s/(s^2+9)), cos(3*t))) - assert (isequal (ilaplace(6/s^4), t^3)) -***** test - % more SMT compact - syms r - syms u positive - assert (isequal (ilaplace(1/r^2, u), u)) - assert (isequal (ilaplace(1/r^2, r, u), u)) -***** test - % if t specified and not positive, we expect heaviside - clear s t - syms s t - assert (isequal (ilaplace(1/s^2, s, t), t*heaviside(t))) - assert (isequal (ilaplace(s/(s^2+9), t), cos(3*t)*heaviside(t))) - assert (isequal (ilaplace(6/s^4, t), t^3*heaviside(t))) -***** test - % Heaviside test - syms s - t=sym('t', 'positive'); - assert(logical( ilaplace(exp(-5*s)/s^2,t) == (t-5)*heaviside(t-5) )) -***** test - % Delta dirac test - syms s - t = sym('t'); - assert (isequal (ilaplace (sym('2'), t), 2*dirac(t))) -***** test - % Delta dirac test 2 - syms s c - t = sym('t', 'positive'); - assert (isequal (ilaplace (5*exp(-3*s) + 2*exp(c*s) - 2*exp(-2*s)/s,t), ... - 5*dirac(t-3) + 2*dirac(c+t) - 2*heaviside(t-2))) -***** error ilaplace (sym('s', 'positive')*sym('s')) -***** test - % SMT compact, prefers s over symvar - syms s x - syms t positive - assert (isequal (ilaplace(x/s^4), x*t^3/6)) - t = sym('t'); - assert (isequal (ilaplace(x/s^4, t), x*t^3/6*heaviside(t))) -***** test - % pick s even it has assumptions - syms s real - syms x t - assert (isequal (ilaplace (x/s^2, t), x*t*heaviside(t))) -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@sym/latex.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/latex.m -***** test - syms x - y = sin(x); - assert ( strcmp( latex(y), '\sin{\left (x \right )}')) - assert ( strcmp( latex(exp(x)), 'e^{x}')) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/frac.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/frac.m -***** test - f1 = frac(sym(11)/10); - f2 = sym(1)/10; - assert (isequal (f1, f2)) -***** test - d = sym(-11)/10; - c = sym(9)/10; - assert (isequal (frac (d), c)) -***** test - d = sym(-19)/10; - c = sym(1)/10; - assert (isequal (frac (d), c)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/sinhint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sinhint.m -***** error sinhint (sym(1), 2) -***** xtest - assert (isequaln (sinhint (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (sinhint (sym (nan)), sym (nan))) failed -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = sinhint(x); - f2 = 1.057250875375728514572; - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = sinhint(A); - f2 = 1.057250875375728514572; - f2 = [f2 f2; f2 f2]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = sinhint (d); - f = sinhint (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) - end -5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/gt.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/gt.m -***** test - % simple - x = sym(1); y = sym(1); e = x > y; - assert (~logical (e)) - x = sym(1); y = sym(2); e = x > y; - assert (~logical (e)) -***** test - % array -- array - syms x - a = sym([1 3 3 2*x]); - b = sym([2 x 3 10]); - e = a > b; - assert (isa (e, 'sym')) - assert (~logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 3 > x)) - assert (~logical (e(3))) - assert (isa (e(4), 'sym')) - assert (isequal (e(4), 2*x > 10)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/tril.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/tril.m -***** test - syms x - assert (isequal (tril(x), x)) -***** test - % with symbols - syms x - A = [x 2*x; 3*x 4*x]; - assert (isequal (tril(A), [x 0; 3*x 4*x])) -***** test - % diagonal shifts - B = round(10*rand(3,4)); - A = sym(B); - assert (isequal (tril(A), tril(B))) - assert (isequal (tril(A,0), tril(B,0))) - assert (isequal (tril(A,1), tril(B,1))) - assert (isequal (tril(A,-1), tril(B,-1))) -***** test - % double array pass through - B = round(10*rand(3,4)); - assert (isequal (tril(B,sym(1)), tril(B,1))) - assert (isa (tril(B,sym(1)), 'double')) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/columns.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/columns.m -***** test - a = sym([1 2 3]); - assert (columns(a) == 3) -***** test - a = sym([1; 2]); - assert (columns(a) == 1) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/atan2.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/atan2.m -***** test - % some angles - e = sym(1); - a = atan2(0, e); - assert (isequal (a, sym(0))) - a = atan2(e, 0); - assert (isequal (a, sym(pi)/2)) -***** test - % symbols can give numerical answer - syms x positive - a = atan2(0, x); - assert (isequal (a, sym(0))) - a = atan2(x, 0); - assert (isequal (a, sym(pi)/2)) - a = atan2(-x, 0); - assert (isequal (a, -sym(pi)/2)) -***** test - % matrices - x = sym([1 -2; 0 0]); - y = sym([0 0; 8 -3]); - a = atan2(y, x); - sp = sym(pi); - aex = [0 sp; sp/2 -sp/2]; - assert (isequal (a, aex)) -***** test - % round trip - syms x y - xd = -2; yd = -3; - f = atan2 (x, y); - A = atan2 (xd, yd); - h = function_handle (f); - B = h (xd, yd); - assert (A, B, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/isequaln.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isequaln.m -***** test - a = sym([1 2]); - b = a; - assert (isequaln (a, b)) - b(1) = 42; - assert (~isequaln (a, b)) -***** test - a = sym([1 2; 3 4]); - b = a; - assert (isequaln (a, b)) - b(1) = 42; - assert (~isequaln (a, b)) -***** test - a = sym([nan; 2]); - b = a; - assert (isequaln (a, b)) -***** test - a = sym([nan 2; 3 4]); - b = a; - assert (isequaln (a, b)) -***** test - % more than two arrays - a = sym([nan 2 3]); - b = a; - c = a; - assert (isequaln (a, b, c)) - c(1) = 42; - assert (~isequaln (a, b, c)) -5 tests, 5 passed, 0 known failure, 0 skipped [inst/@sym/eq.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/eq.m ***** test @@ -10482,1395 +10289,116 @@ a = zeros (sym(0), 2); assert (size (a == a), [0, 2]) 8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/private_disp_name.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/private_disp_name.m -***** test - syms x - s = private_disp_name(x, 'x'); - assert (strcmp (s, 'x')) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/rewrite.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/rewrite.m -***** test - syms x - assert (isequal (rewrite(x, 'exp'), x)) -***** test - % empty - e = sym([]); - assert (isequal (rewrite(e, 'sin'), e)) -***** test - syms x - A = [exp(x) exp(2*x)]; - B = [sinh(x) + cosh(x) sinh(2*x) + cosh(2*x)]; - assert (isequal (rewrite(A, 'sin'), B)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/isvector.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isvector.m -***** assert(isvector(sym('x'))) -***** assert(isvector(sym([1 2 3]))) -***** assert(isvector(sym([1; 2]))) -***** assert(~isvector(sym([1 2; 3 4]))) -***** assert(~isvector(sym([]))) -***** assert(isvector(sym(ones(1,0)))) -***** assert(~isvector(sym(ones(0,3)))) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/isallconstant.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isallconstant.m -***** assert (isallconstant([sym(1) 2 3])) -***** test - syms x - assert (~isallconstant([sym(1) x 3])) -***** test - syms x - assert (~isallconstant([sym(1) x; sym(2) 3])) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/cos.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cos.m -***** error cos (sym(1), 2) -***** assert (isequaln (cos (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = cos(x); - f2 = cos(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = cos(A); - f2 = cos(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = cos (d); - f = cos (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/besselyn.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselyn.m -***** test - % roundtrip - syms x - A = double(besselyn(sym(2), sym(10))); - q = besselyn(sym(2), x); - h = function_handle(q); - B = h(10); - assert (abs (A - B) <= eps) -***** error yn(sym('x')) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/formula.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/formula.m -***** test - syms x - assert (isequal (formula(x), x)) - assert (isequal (formula(2*x), 2*x)) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/real.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/real.m -***** assert (isequal (real (sym (4) + 3i),4)) -***** test - syms x y real - z = x + 1i*y; - assert (isequal (real (z),x)) -***** test - syms x y real - Z = [4 x + 1i*y; x 4 + 3i]; - assert (isequal (real (Z),[4 x; x 4])) -***** test - syms x real - d = exp (x*i); - assert (isequal (real (d), cos (x))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.1.1")')) - syms x - d = 3 - 5i; - f = real (x); - A = real (d); - h = function_handle (f); - B = h (d); - assert (A, B) - end -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/acosh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/acosh.m -***** error acosh (sym(1), 2) -***** assert (isequaln (acosh (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = acosh(x); - f2 = acosh(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = acosh(A); - f2 = acosh(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = acosh (d); - f = acosh (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ssinint.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ssinint.m -***** assert (isequal (ssinint(sym(0)), -sym(pi)/2)) -***** test - A = ssinint (sym ([0 1])); - B = [-pi/2 -0.62471325642771360426]; - assert( all(all( abs(double(A)-B) < 1e-15 ))) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/erfi.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfi.m -***** error erfi (sym(1), 2) -***** assert (isequaln (erfi (sym(nan)), sym(nan))) -***** shared x, d - d = 0; - x = sym('0'); -***** test - f1 = erfi(x); - f2 = 0; - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = erfi(A); - f2 = 0; - f2 = [f2 f2; f2 f2]; - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - y = sym('y'); - A = erfi (d); - f = erfi (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) - end -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/sort.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sort.m -***** error sort (sym(1), 2) -***** test - f = [sym(1), sym(0)]; - expected = sym([0, 1]); - assert (isequal (sort(f), expected)) -***** test - f = [sym(1)]; - expected = sym(1); - assert (isequal (sort(f), expected)) -***** test - f = [sym(3), sym(2), sym(6)]; - s = sort(f); - expected_s = sym([2, 3, 6]); - assert (isequal (s, expected_s)) -***** test - f = [sym(pi), sin(sym(2)), sqrt(sym(6))]; - s = sort(f); - expected_s = sym([sin(sym(2)), sqrt(sym(6)), sym(pi)]); - assert (isequal (s, expected_s)) -***** test - f = [sym(1), sym(2); sym(2), sym(pi); sym(pi), sym(1)]; - s = sort(f); - expected_s = ([sym(1), sym(1); sym(2), sym(2); sym(pi), sym(pi)]); - assert (isequal (s, expected_s)) -***** assert (isequal (sort(sym([])), sym([]))) -***** error sort([sym('x') 1]) -***** test - % but with assumptions, symbols can be sorted - p = sym('p', 'positive'); - n = sym('n', 'negative'); - expected_s = [n p]; - s = sort ([p n]); - assert (isequal (s, expected_s)) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/length.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/length.m -***** test - a = sym([1 2 3]); - assert(length(a) == 3); -***** test - % 2D array - a = sym([1 2 3; 4 5 6]); - assert(length(a) == 3); -***** test - % empty - a = sym([]); - assert(length(a) == 0); -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/nchoosek.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/nchoosek.m -***** assert (isequal (nchoosek(sym(5), sym(2)), sym(10))) -***** assert (isequal (nchoosek(sym(5), 2), sym(10))) -***** assert (isequal (nchoosek(5, sym(2)), sym(10))) -***** assert (isequal (nchoosek(sym(10), 0), 1)) -***** assert (isequal (nchoosek(sym(10), -1), 0)) -***** test - n = sym('n', 'nonnegative', 'integer'); - assert (isequal (nchoosek (n, n), sym(1))) -***** test - n = sym('n', 'integer'); - q = nchoosek(n, 2); - w = subs(q, n, 5); - assert (isequal (w, 10)) -***** test - n = sym('n', 'integer'); - k = sym('k', 'integer'); - q = nchoosek(n, k); - w = subs(q, {n k}, {5 2}); - assert (isequal (w, 10)) -***** test - % negative input - assert (isequal (nchoosek (sym(-2), sym(5)), sym(-6))) -***** test - % complex input - n = sym(1 + 3i); - k = sym(5); - A = nchoosek (n, k); - B = gamma (n + 1) / (gamma (k + 1) * gamma (n - k + 1)); - assert (double (A), double (B), -2*eps) -***** test - % complex input - n = sym(-2 + 3i); - k = sym(1 + i); - A = nchoosek (n, k); - B = gamma (n + 1) / (gamma (k + 1) * gamma (n - k + 1)); - assert (double (A), double (B), -2*eps) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/union.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/union.m -***** test - A = sym([1 2 3]); - B = sym([1 2 4]); - C = union(A, B); - D = sym([1 2 3 4]); - assert (isequal (C, D)) -***** test - % one nonsym - A = sym([1 2 3]); - B = [1 2 4]; - C = union(A, B); - D = sym([1 2 3 4]); - assert (isequal (C, D)) -***** test - % empty - A = sym([1 2 3]); - C = union(A, A); - assert (isequal(C, A)) -***** test - % empty input - A = sym([1 2]); - C = union(A, []); - assert (isequal (C, sym([1 2]))) -***** test - % scalar - syms x - assert (isequal (union([x 1], x), [1 x])) - assert (isequal (union(x, x), x)) -***** test - A = interval(sym(1), 3); - B = interval(sym(2), 5); - C = union(A, B); - assert( isequal( C, interval(sym(1), 5))) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/assumeAlso.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/assumeAlso.m -***** test - syms x - x = assumeAlso(x, 'positive'); - a = assumptions(x); - assert(strcmp(a, 'x: positive')) -***** error - syms x - x = assumeAlso (x, x); -***** test - syms x positive - x = assumeAlso(x, 'integer'); - [tilde, a] = assumptions(x, 'dict'); - assert(a{1}.integer) - assert(a{1}.positive) -***** test - % multiple assumptions - syms x positive - x = assumeAlso(x, 'integer', 'even'); - [tilde, a] = assumptions(x, 'dict'); - assert(a{1}.integer) - assert(a{1}.positive) - assert(a{1}.even) -***** test - % multiple assumptions - syms x integer - x = assumeAlso (x, 'even', 'positive'); - [tilde, a] = assumptions (x, 'dict'); - assert (a{1}.integer) - assert (a{1}.even) - assert (a{1}.positive) -***** test - % has output so avoids workspace - syms x positive - x2 = x; - f = sin(x); - assumeAlso(x, 'integer'); - a = assumptions(x); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) - a = assumptions(x2); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) - a = assumptions(f); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) -***** test - % has no output so does workspace - syms x positive - x2 = x; - f = sin(x); - assumeAlso(x, 'integer'); - a = assumptions(x); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) - a = assumptions(x2); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) - a = assumptions(f); - assert(strcmp(a, 'x: positive, integer') || strcmp(a, 'x: integer, positive')) -***** error - syms a - assumeAlso (a > 0) +[inst/@sym/lhs.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/lhs.m ***** test syms x y - assumeAlso ([x y], 'even') - assert (strcmp (assumptions (x), 'x: even')) - assert (strcmp (assumptions (y), 'y: even')) -***** test - syms x y positive - f = sin (2*x); - assumeAlso ([x y], 'even') - assert (strcmp (assumptions (x), 'x: even, positive') || strcmp (assumptions (x), 'x: positive, even')) - assert (strcmp (assumptions (y), 'y: even, positive') || strcmp (assumptions (y), 'y: positive, even')) - assert (strcmp (assumptions (f), 'x: even, positive') || strcmp (assumptions (f), 'x: positive, even')) -***** test - % with output, original x and y are unchanged - syms x y positive - f = sin (2*x); - [p, q] = assumeAlso ([x y], 'even'); - assert (strcmp (assumptions (x), 'x: positive')) - assert (strcmp (assumptions (y), 'y: positive')) - assert (strcmp (assumptions (f), 'x: positive')) - assert (strcmp (assumptions (p), 'x: even, positive') || strcmp (assumptions (p), 'x: positive, even')) - assert (strcmp (assumptions (q), 'y: even, positive') || strcmp (assumptions (q), 'y: positive, even')) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/sqrt.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sqrt.m -***** error sqrt (sym(1), 2) -***** assert (isequaln (sqrt (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); -***** test - f1 = sqrt(x); - f2 = sqrt(d); - assert( abs(double(f1) - f2) < 1e-15 ) -***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = sqrt(A); - f2 = sqrt(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) -***** test - % round trip - y = sym('y'); - A = sqrt (d); - f = sqrt (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/sym2poly.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sym2poly.m -***** shared x,y,a,b,c - syms x y a b c -***** assert (isequal (sym2poly (x^2 + 3*x - 4), [1 3 -4])) -***** assert (isequal (sym2poly (x^6 - x^3), [1 0 0 -1 0 0 0])) -***** assert (isequal (sym2poly (x^2 + 3*x - 4, x), [1 3 -4])) -***** assert (norm (sym2poly (pi*x^2 + exp(sym(1))) - [pi 0 exp(1)]) < 10*eps) -***** assert (isa (sym2poly (x^2 + 3*x - 4), 'double')) -***** assert (isa (sym2poly (x^2 + 3*x - 4, x), 'sym')) -***** assert (isequal (sym2poly (x^2+y*x, x), [sym(1) y sym(0)])) -***** assert (isequal (sym2poly (x^2+y*x, y), [x x^2])) -***** assert (isequal (sym2poly (poly2sym ([a b c], x), x), [a b c])) -***** assert (isequal (poly2sym (sym2poly(a*x^2 + c, x), x), a*x^2 + c)) -***** assert (isequal (sym2poly (poly2sym ([1 2 3])), [1 2 3])) -***** error - % too many symbols for single-input - p = a*x^2 + 2; - c = sym2poly (p); -12 tests, 12 passed, 0 known failure, 0 skipped -[inst/@sym/toeplitz.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/toeplitz.m -***** test - % rect - R = [10 20 40]; C = [10 30]; - A = sym(toeplitz(R,C)); - B = toeplitz(sym(R),sym(C)); - assert (isequal (A, B)) - R = [10 20]; C = [10 30 50]; - A = sym(toeplitz(R,C)); - B = toeplitz(sym(R),sym(C)); - assert (isequal (A, B)) + f = x + 1 == 2*y; + assert (isequal (lhs(f), x + 1)) + assert (isequal (rhs(f), 2*y)) ***** test - % symbols syms x y - R = [10 20 40]; C = [10 30]; - Rs = [10 x 40]; Cs = [10 y]; - A = toeplitz(R,C); - B = toeplitz(Rs,Cs); - assert (isequal (A, subs(B,[x,y],[20 30]))) -***** test - % hermitian - syms a b c - A = [a b c; conj(b) a b; conj(c) conj(b) a]; - B = toeplitz([a,b,c]); - assert (isequal( A, B)) -***** warning - % mismatch - syms x - B = toeplitz([10 x], [1 3 x]); -***** warning - % scalar - B = toeplitz(sym(2), 3); - assert (isequal (B, sym(2))) + f = x + 1 < 2*y; + assert (isequal (lhs(f), x + 1)) + assert (isequal (rhs(f), 2*y)) ***** test - % mismatch syms x y - fprintf('\n one warning expected\n') % how to quiet this one? - A = toeplitz([10 2], [1 3 5]); - s = warning ('off', 'OctSymPy:toeplitz:diagconflict'); - B = toeplitz([10 x], [1 3 y]); - warning(s) - assert (isequal (A, subs(B, [x,y], [2 5]))) - - one warning expected -warning: toeplitz: column wins diagonal conflict -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@sym/dilog.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/dilog.m -***** assert (isequal (dilog (sym(1)), sym(0))) -***** assert (isequal (dilog (sym(0)), sym(pi)^2/6)) -***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - assert (isequal (dilog (sym(2)), -sym(pi)^2/12)) - end -***** assert (double(dilog(sym(-1))), pi^2/4 - pi*1i*log(2), eps) -***** test - % round-trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - f = dilog (x); - h = function_handle (f); - A = h (1.1); - B = dilog (1.1); - assert (A, B, -eps) - end -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/reshape.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/reshape.m + f = x + 1 >= 2*y; + assert (isequal (lhs(f), x + 1)) + assert (isequal (rhs(f), 2*y)) ***** test - d = [2 4 6; 8 10 12]; - a = sym(d); - assert (isequal (reshape(a, [1 6]), reshape(d, [1 6]))) - assert (isequal (reshape(a, 1, 6), reshape(d, 1, 6))) - assert (isequal (reshape(a, 2, 3), reshape(d, 2, 3))) - assert (isequal (reshape(a, 3, 2), reshape(d, 3, 2))) - assert (isequal (reshape(a, 6, 1), reshape(d, 6, 1))) -***** shared x, a, d + syms x y + A = [x == y 2*x < 2*y; 3*x > 3*y 4*x <= 4*y; 5*x >= 5*y x < 0]; + L = [x 2*x; 3*x 4*x; 5*x x]; + R = [y 2*y; 3*y 4*y; 5*y 0]; + assert (isequal( lhs(A), L)) + assert (isequal( rhs(A), R)) +***** error syms x - a = [1 x^2 x^4; x x^3 x^5]; - d = [0 2 4; 1 3 5]; - -***** test - b = reshape(a, [1 6]); - assert (isequal (size(b), [1 6])) - assert (isequal (b, x.^reshape(d,1,6))) - -***** test - b = reshape(a, [6 1]); - assert (isequal (size(b), [6 1])) - assert (isequal (b, x.^reshape(d,6,1))) - b = reshape(b, size(a)); - assert (isequal (size(b), [2 3])) - assert (isequal (b, a)) - -***** test - b = a(:); - assert( isequal (size(b), [6 1])) - assert( isequal (b, x.^(d(:)))) - -***** test - % reshape scalar - assert (logical( reshape(x, 1, 1) == x )) - assert (logical( reshape(x, [1 1]) == x )) -***** shared a - syms a -***** error reshape(a, 2, 1) -***** error reshape(a, 1, 2) -***** error reshape(a, 1, 1, 1) -***** error reshape(a, [1, 1, 1]) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/ellipke.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipke.m -***** error ellipke (sym(1), 2) -***** test - for i = 2:10 - [K E] = ellipke (sym (1)/i); - [k e] = ellipke (1/i); - assert (double ([K E]), [k e], 2*eps) - end -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/laguerreL.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/laguerreL.m -***** shared x + lhs(x) +***** error + lhs(sym(true)) +***** error syms x -***** assert (isequal (laguerreL(0, x), sym(1))) -***** assert (isequal (laguerreL(1, x), 1-x)) -***** assert (isequal (laguerreL(2, x), x^2/2 - 2*x + 1)) -***** error laguerreL(-1, x) -***** error laguerreL(x) -***** error laguerreL(1, 2, x, 3) -***** shared -***** test - syms x n - L = laguerreL([2 n], x); - expected = [laguerreL(2, x) laguerreL(n, x)]; - assert (isequal (L, expected)) -***** test - syms x y - L = laguerreL([1; 2], [x; y]); - expected = [laguerreL(1, x); laguerreL(2, y)]; - assert (isequal (L, expected)) -***** test - syms x n - assert (isequal (laguerreL(n, 0, x), laguerreL(n, x))) -***** shared x, y, n - syms x y n -***** assert (isequal (laguerreL([1 n], 0, x), laguerreL([1 n], x))) -***** test - L = laguerreL([1; n], [pi; 0], [x; y]); - expected = [laguerreL(1, pi, x); laguerreL(n, 0, y)]; - assert (isequal (L, expected)) -***** test - L = laguerreL([1 n], [pi 0], x); - expected = [laguerreL(1, pi, x) laguerreL(n, 0, x)]; - assert (isequal (L, expected)) -***** test - L = laguerreL([1 n], pi, [x y]); - expected = [laguerreL(1, pi, x) laguerreL(n, pi, y)]; - assert (isequal (L, expected)) -***** test - L = laguerreL(1, [pi 0], [x y]); - expected = [laguerreL(1, pi, x) laguerreL(1, 0, y)]; - assert (isequal (L, expected)) -***** test - L = laguerreL([1 n], pi, x); - expected = [laguerreL(1, pi, x) laguerreL(n, pi, x)]; - assert (isequal (L, expected)) -***** test - L = laguerreL(1, [pi 0], x); - expected = [laguerreL(1, pi, x) laguerreL(1, 0, x)]; - assert (isequal (L, expected)) -***** test - L = laguerreL(1, pi, [x y]); - expected = [laguerreL(1, pi, x) laguerreL(1, pi, y)]; - assert (isequal (L, expected)) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - f = laguerreL (n, x); - h = function_handle (f); - A = h (1, 3.2); - B = laguerreL (1, 3.2); - assert (A, B) - A = h ([1 2], [3.3 4.4]); - B = laguerreL ([1 2], [3.3 4.4]); - assert (A, B) - end -***** error - % round trip - f = laguerreL (n, y, x); - h = function_handle (f); -19 tests, 19 passed, 0 known failure, 0 skipped -[inst/@sym/gradient.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/gradient.m -***** shared x,y,z - syms x y z -***** test - % 1D - f = x^2; - assert (isequal (gradient(f), diff(f,x))) - assert (isequal (gradient(f,{x}), diff(f,x))) - assert (isequal (gradient(f,[x]), diff(f,x))) - assert (isequal (gradient(f,x), diff(f,x))) -***** test - % const - f = sym(1); - g = sym(0); - assert (isequal (gradient(f), g)) - assert (isequal (gradient(f,x), g)) -***** test - % double const - f = 1; - g = sym(0); - assert (isequal (gradient(f,x), g)) -***** test - % 1D fcn in 2d/3d - f = sin(y); - assert (isequal (gradient(f), diff(f,y))) - assert (isequal (gradient(f, {x,y}), [sym(0); diff(f,y)])) - assert (isequal (gradient(f, [x y]), [sym(0); diff(f,y)])) - assert (isequal (size (gradient(f, {x,y})), [2 1])) - assert (isequal (gradient(f, {x,y,z}), [0; diff(f,y); 0])) - assert (isequal (gradient(f, [x y z]), [0; diff(f,y); 0])) - assert (isequal (size (gradient(f, {x,y,z})), [3 1])) -***** test - % grad is column vector - f = sin(y); - assert (isequal (size (gradient(f, {x,y})), [2 1])) - assert (isequal (size (gradient(f, {x,y,z})), [3 1])) - assert (isequal (size (gradient(f, [x y])), [2 1])) - assert (isequal (size (gradient(f, [x;y])), [2 1])) -***** test - % 2d fcn in 2d/3d - f = sin(exp(x)*y); - g2 = [diff(f,x); diff(f,y)]; - g3 = [diff(f,x); diff(f,y); diff(f,z)]; - assert (isequal (gradient(f), g2)) - assert (isequal (gradient(f, {x,y}), g2)) - assert (isequal (gradient(f, {x,y,z}), g3)) -***** test - % 2d fcn in 2d/3d - f = sin(exp(x)*y+sinh(z)); - g2 = [diff(f,x); diff(f,y)]; - g3 = [diff(f,x); diff(f,y); diff(f,z)]; - assert (isequal (gradient(f), g3)) - assert (isequal (gradient(f, {x,y}), g2)) - assert (isequal (gradient(f, {x,y,z}), g3)) -***** error gradient(sym('x'), 42, 42) -***** error gradient([sym('x') sym('x')]) -9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/isNone.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isNone.m -***** test - None = python_cmd ('return None'); -***** shared None - None = python_cmd ('return None'); -***** assert (isNone(None)) -***** assert (~isNone(sym('x'))) -***** assert (islogical(isNone(None))) -***** test - a = [1 None]; - a = [None None]; - a = [None; 1]; - a = [None; None]; - a = [None 2; 3 None]; -***** test - a = sym([1 2]); - a(1,2) = None; - assert (isequal (a, [sym(1) None])); -***** assert (isequal (None(1), None)); -***** error None(None); -***** error x=sym('x'); x(None); -***** error x=1; x(None); -***** error None(None); -***** error 1 + None; -***** error None - 1; -***** error 6*None; -***** error 2**None; -***** error [1 2].*None; -***** error isconstant(None); -***** error nnz(None); -***** error logical(None); -***** error isAlways(None); -***** error logical([sym(true) None]); -***** error isAlways([sym(true) None]); -***** assert (isequal (children(None), None)) -***** assert (isequal (repmat(None, 1, 2), [None None])) -***** assert (isequal (fliplr(None), None)) -***** assert (isequal (flipud(None), None)) -26 tests, 26 passed, 0 known failure, 0 skipped -[inst/@sym/floor.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/floor.m -***** error floor (sym(1), 2) -***** assert (isequaln (floor (sym(nan)), sym(nan))) + A = [1 + x == 2*x sym(6)]; + lhs(A) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/@sym/asec.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/asec.m +***** error asec (sym(1), 2) +***** assert (isequaln (asec (sym(nan)), sym(nan))) ***** shared x, d - d = 1; - x = sym('1'); + d = 2; + x = sym('2'); ***** test - f1 = floor(x); - f2 = floor(d); + f1 = asec(x); + f2 = asec(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = floor(A); - f2 = floor(D); + f1 = asec(A); + f2 = asec(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = floor (d); - f = floor (y); + A = asec (d); + f = asec (y); h = function_handle (f); B = h (d); assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/flipud.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/flipud.m -***** test - % simple - syms x - A = [x 2; sym(pi) x]; - B = [sym(pi) x; x 2]; - assert (isequal (flipud(A), B)) -***** test - % simple, odd # rows - syms x - A = [x 2; sym(pi) x; [1 2]]; - B = [[1 2]; sym(pi) x; x 2]; - assert (isequal (flipud(A), B)) -***** test - % scalar - syms x - assert (isequal (flipud(x), x)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/besselk.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselk.m -***** test - X = [1 2 3; 4 5 6]; - ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; - n = double(ns); - A = double(besselk(ns, X)); - B = besselk(n, X); - assert (all (all (abs (A - B) < 2*eps*abs(A)))) -***** test - % roundtrip - syms x - A = besselk(2, 10); - q = besselk(2, x); - h = function_handle(q); - B = h(10); - assert (abs (A - B) <= eps*abs(A)) -***** error besselk(sym('x')) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/gammainc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/gammainc.m -***** assert (isequal (gammainc (sym(0), 1), sym(0))) -***** assert (isequal (gammainc (sym(0), 2), sym(0))) -***** assert (isequal (gammainc (sym('oo'), 1), sym(1))) -***** assert (isequal (gammainc (sym(0), 1, 'upper'), sym(1))) -***** assert (isequal (gammainc (sym(0), 2, 'upper'), sym(1))) -***** assert (isequal (gammainc (sym('oo'), 1, 'upper'), sym(0))) -***** test - % default is lower - syms x a - assert (isequal (gammainc (x, a), gammainc(x, a, 'lower'))) -***** test - % compare to double - x = 5; a = 1; - A = gammainc (x, a); - B = double (gammainc (sym(x), a)); - assert(A, B, -eps) -***** test - % compare to double - x = 100; a = 1; - A = gammainc (x, a); - B = double (gammainc (sym(x), a)); - assert(A, B, -eps) -***** test - % compare to double - xs = sym(1)/1000; x = 1/1000; a = 1; - A = gammainc (x, a); - B = double (gammainc (xs, a)); - assert(A, B, -eps) -***** test - % compare to double - x = 5; a = 1; - A = gammainc (x, a, 'upper'); - B = double (gammainc (sym(x), a, 'upper')); - assert(A, B, -10*eps) -***** test - % compare to double - % https://savannah.gnu.org/bugs/index.php?47800 - if (~ exist('OCTAVE_VERSION', 'builtin') || ... - compare_versions (OCTAVE_VERSION (), '4.3.0', '>=')) - x = 10; a = 1; - A = gammainc (x, a, 'upper'); - B = double (gammainc (sym(x), a, 'upper')); - assert(A, B, -10*eps) - end -***** test - % compare to double - if (~ exist('OCTAVE_VERSION', 'builtin') || ... - compare_versions (OCTAVE_VERSION (), '4.3.0', '>=')) - x = 40; a = 1; - A = gammainc (x, a, 'upper'); - B = double (gammainc (sym(x), a, 'upper')); - assert(A, B, -10*eps) - end -***** test - % compare to double - xs = sym(1)/1000; x = 1/1000; a = 1; - A = gammainc (x, a, 'upper'); - B = double (gammainc (xs, a, 'upper')); - assert(A, B, -eps) -***** test - % vectorized - P = gammainc([sym(pi) 2], [1 3]); - expected = [gammainc(pi, sym(1)) gammainc(2, sym(3))]; - assert (isequal (P, expected)) -***** test - % vectorized - P = gammainc(sym(pi), [1 3]); - expected = [gammainc(sym(pi), 1) gammainc(sym(pi), 3)]; - assert (isequal (P, expected)) -***** test - % vectorized - P = gammainc([sym(pi) 2], 1); - expected = [gammainc(pi, sym(1)) gammainc(2, sym(1))]; - assert (isequal (P, expected)) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x a - f = gammainc (x, a, 'upper'); - h = function_handle (f, 'vars', [x a]); - A = h (1.1, 2.2); - B = gammainc (1.1, 2.2, 'upper'); - assert (A, B) - end -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x a - f = gammainc (x, a, 'lower'); - h = function_handle (f, 'vars', [x a]); - A = h (1.1, 2.2); - B = gammainc (1.1, 2.2, 'lower'); - assert (A, B) - end -19 tests, 19 passed, 0 known failure, 0 skipped -[inst/@sym/sum.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sum.m -***** error sum (sym(1), 2, 3) -***** error sum (sym(1), 42) -***** shared x,y,z - syms x y z -***** assert (isequal (sum (x), x)) -***** assert (isequal (sum ([x y z]), x+y+z)) -***** assert (isequal (sum ([x; y; z]), x+y+z)) -***** assert (isequal (sum ([x y z], 1), [x y z])) -***** assert (isequal (sum ([x y z], 2), x+y+z)) -***** shared a,b - b = [1 2; 3 4]; a = sym(b); -***** assert (isequal (sum(a), sum(b))) -***** assert (isequal (sum(a,1), sum(b,1))) -***** assert (isequal (sum(a,2), sum(b,2))) -***** test - % weird inputs - a = sum('xx', sym(1)); - assert (isequal (a, sym('xx'))) -11 tests, 11 passed, 0 known failure, 0 skipped -[inst/@sym/horzcat.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/horzcat.m -***** test - % basic - syms x - A = [x x]; - B = horzcat(x, x); - C = horzcat(x, x, x); - assert (isa (A, 'sym')) - assert (isa (B, 'sym')) - assert (isa (C, 'sym')) - assert (isequal (size(A), [1 2])) - assert (isequal (size(B), [1 2])) - assert (isequal (size(C), [1 3])) -***** test - % basic, part 2 - syms x - A = [x 1]; - B = [1 x]; - C = [1 2 x]; - assert (isa (A, 'sym')) - assert (isa (B, 'sym')) - assert (isa (C, 'sym')) - assert (isequal (size(A), [1 2])) - assert (isequal (size(B), [1 2])) - assert (isequal (size(C), [1 3])) -***** test - % row vectors - a = [sym(1) 2]; - b = [sym(3) 4]; - assert (isequal ( [a b] , [1 2 3 4] )) - assert (isequal ( [a 3 4] , [1 2 3 4] )) - assert (isequal ( [3 4 a] , [3 4 1 2] )) - assert (isequal ( [a [3 4]] , [1 2 3 4] )) - assert (isequal ( [a sym(3) 4] , [1 2 3 4] )) - assert (isequal ( [a [sym(3) 4]] , [1 2 3 4] )) -***** test - % col vectors - a = [sym(1); 2]; - b = [sym(3); 4]; - assert (isequal ( [a b] , [1 3; 2 4] )) - assert (isequal ( [a b a] , [1 3 1; 2 4 2] )) -***** test - % empty vectors - v = sym(1); - a = [v []]; - assert (isequal (a, v)) - a = [[] v []]; - assert (isequal (a, v)) - a = [v [] []]; - assert (isequal (a, v)) -***** test - % more empty vectors - v = [sym(1) sym(2)]; - q = sym(ones(1, 0)); - assert (isequal ([v q], v)) -***** error - v = [sym(1) sym(2)]; - q = sym(ones(3, 0)); - w = horzcat(v, q); -***** test - % issue #700 - A = sym ([1 2]); - B = simplify (A); - assert (isequal ([B A], [A B])) -8 tests, 8 passed, 0 known failure, 0 skipped -[inst/@sym/taylor.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/taylor.m -***** test - syms x - f = exp(x); - expected = 1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120; - assert (isequal (taylor(f), expected)) - assert (isequal (taylor(f,x), expected)) - assert (isequal (taylor(f,x,0), expected)) -***** test - syms x - f = exp(x); - expected = 1 + x + x^2/2 + x^3/6 + x^4/24; - assert (isequal (taylor(f,'order',5), expected)) - assert (isequal (taylor(f,x,'order',5), expected)) - assert (isequal (taylor(f,x,0,'order',5), expected)) -***** test - % key/value ordering doesn't matter - syms x - f = exp(x); - g1 = taylor(f, 'expansionPoint', 1, 'order', 3); - g2 = taylor(f, 'order', 3, 'expansionPoint', 1); - assert (isequal (g1, g2)) -***** test - syms x - f = x^2; - assert (isequal (taylor(f,x,0,'order',0), 0)) - assert (isequal (taylor(f,x,0,'order',1), 0)) - assert (isequal (taylor(f,x,0,'order',2), 0)) - assert (isequal (taylor(f,x,0,'order',3), x^2)) - assert (isequal (taylor(f,x,0,'order',4), x^2)) -***** test - syms x y - f = exp(x)+exp(y); - expected = 2 + x + x^2/2 + x^3/6 + x^4/24 + y + y^2/2 + y^3/6 + y^4/24; - assert (isAlways(taylor(f,[x,y],'order',5)== expected)) - assert (isAlways(taylor(f,[x,y],[0,0],'order',5) == expected)) -***** test - % key/value ordering doesn't matter - syms x - f = exp(x); - g1 = taylor(f, 'expansionPoint', 1, 'order', 3); - g2 = taylor(f, 'order', 3, 'expansionPoint', 1); - assert (isequal (g1, g2)) -***** test - syms x - f = x^2; - assert (isequal (taylor(f,x,0,'order',0), 0)) - assert (isequal (taylor(f,x,0,'order',1), 0)) - assert (isequal (taylor(f,x,0,'order',2), 0)) - assert (isequal (taylor(f,x,0,'order',3), x^2)) - assert (isequal (taylor(f,x,0,'order',4), x^2)) -***** test - % syms for a and order - syms x - f = x^2; - assert (isequal (taylor(f,x,sym(0),'order',sym(2)), 0)) - assert (isequal (taylor(f,x,sym(0),'order',sym(4)), x^2)) -***** test - syms x y - f = exp (x^2 + y^2); - expected = 1+ x^2 +y^2 + x^4/2 + x^2*y^2 + y^4/2; - assert (isAlways(taylor(f,[x,y],'order',5)== expected)) - assert (isAlways(taylor(f,[x,y],'expansionPoint', [0,0],'order',5) == expected)) -***** test - syms x y - f = sqrt(1+x^2+y^2); - expected = 1+ x^2/2 +y^2/2 - x^4/8 - x^2*y^2/4 - y^4/8; - assert (isAlways(taylor(f,[x,y],'order',6)== expected)) - assert (isAlways(taylor(f,[x,y],'expansionPoint', [0,0],'order',5) == expected)) -***** test - syms x y - f = sin (x^2 + y^2); - expected = sin(sym(1))+2*cos(sym(1))*(x-1)+(cos(sym(1))-2*sin(sym(1)))*(x-1)^2 + cos(sym(1))*y^2; - assert (isAlways(taylor(f,[x,y],'expansionPoint', [1,0],'order',3) == expected)) -***** test - % key/value ordering doesn't matter - syms x y - f = exp(x+y); - g1 = taylor(f, 'expansionPoint',1, 'order', 3); - g2 = taylor(f, 'order', 3, 'expansionPoint',1); - assert (isAlways(g1== g2)) -***** test - syms x y - f = x^2 + y^2; - assert (isAlways(taylor(f,[x,y],[0,0],'order',0)== sym(0) )) - assert (isAlways(taylor(f,[x,y],[0,0],'order',1)== sym(0) )) - assert (isAlways(taylor(f,[x,y],[0,0],'order',2)== sym(0) )) - assert (isAlways(taylor(f,[x,y],[0,0],'order',3)== sym(x^2 + y^2))) - assert (isAlways(taylor(f,[x,y],[0,0],'order',4)== sym(x^2 + y^2))) -***** test - % expansion point - syms x a - f = x^2; - g = taylor(f,x,2); - assert (isequal (simplify(g), f)) - assert (isequal (g, 4*x+(x-2)^2-4)) - g = taylor(f,x,a); - assert (isequal (simplify(g), f)) -***** test - % wrong order-1 series with nonzero expansion pt: - % upstream bug https://github.com/sympy/sympy/issues/9351 - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - g = x^2 + 2*x + 3; - h = taylor (g, x, 4, 'order', 1); - assert (isequal (h, 27)) end -***** test - syms x y z - g = x^2 + 2*y + 3*z; - h = taylor (g, [x,y,z], 'order', 4); - assert (isAlways(h == g)) ; -***** test - syms x y z - g = sin(x*y*z); - h = taylor (g, [x,y,z], 'order', 4); - assert (isAlways(h == x*y*z)) ; -***** error - syms x y - taylor(0, [x, y], [1, 2, 3]); -18 tests, 18 passed, 0 known failure, 0 skipped -[inst/@sym/permute.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/permute.m -***** error permute (sym(1)) -***** test - D = round(10*rand(5,3)); - A = sym(D); - B = permute(A, [1 2]); - assert (isequal(B, A)) - B = permute(A, [2 1]); - assert (isequal(B, A.')) -***** test - syms x - A = [1 x]; - B = permute(A, [2 1]); - assert (isequal(B, [1; x])) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/or.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/or.m -***** shared t, f - t = sym(true); - f = sym(false); -***** test - % simple - assert (isequal (t | f, t)) - assert (isequal (t | t, t)) - assert (isequal (f | f, f)) -***** test - % array - w = [t t f f]; - z = [t f t f]; - assert (isequal (w | z, [t t t f])) -***** test - % output is sym even for scalar t/f - assert (isa (t | f, 'sym')) -***** test - % eqns - syms x - e = or(x == 4, x == 5); - assert (isequal (subs(e, x, [3 4 5 6]), [f t t f])) -***** error or (sym(1), 2, 3) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/end.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/end.m -***** test - % scalar - syms x - y = x(1:end); - assert (isequal (x, y)) -***** test - % vector - syms x - A = [1 2 x 4]; - y = A(end-1:end); - assert (isequal (y, [x 4])) -***** test - % subset of matrix - syms x - A = [1 2 x; x 3 9; 4 x*x 6]; - y = A(end,1:end-1); - assert (isequal (y, [4 x*x])) -***** test - % linear index of matrix - syms x - A = [1 2 x; x 3 9]; - y = A(end); - assert (isequal (y, sym(9))) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/subs.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/subs.m -***** error subs (sym(1), 2, 3, 4) -***** shared x,y,t,f - syms x y t - f = x*y; -***** test - assert( isequal( subs(f, x, y), y^2 )) - assert( isequal( subs(f, y, sin(x)), x*sin(x) )) - assert( isequal( subs(f, x, 16), 16*y )) -***** test - % multiple subs w/ cells - assert( isequal( subs(f, {x}, {t}), y*t )) - assert( isequal( subs(f, {x y}, {t t}), t*t )) - assert( isequal( subs(f, {x y}, {t 16}), 16*t )) - assert( isequal( subs(f, {x y}, {16 t}), 16*t )) - assert( isequal( subs(f, {x y}, {2 16}), 32 )) -***** test - % multiple subs w/ vectors - assert( isequal( subs(f, [x y], [t t]), t*t )) - assert( isequal( subs(f, [x y], [t 16]), 16*t )) - assert( isequal( subs(f, [x y], [2 16]), 32 )) -***** test - % anything you can think of - assert( isequal( subs(f, [x y], {t t}), t*t )) - assert( isequal( subs(f, {x y}, [t t]), t*t )) - assert( isequal( subs(f, {x; y}, [t; t]), t*t )) -***** test - % sub in doubles gives sym (matches SMT 2013b) - % FIXME: but see - % http://www.mathworks.co.uk/help/symbolic/gradient.html - assert( isequal( subs(f, {x y}, {2 pi}), 2*sym(pi) )) - assert( ~isa(subs(f, {x y}, {2 pi}), 'double')) - assert( isa(subs(f, {x y}, {2 pi}), 'sym')) - assert( isa(subs(f, {x y}, {2 sym(pi)}), 'sym')) - assert( isa(subs(f, {x y}, {sym(2) sym(pi)}), 'sym')) -***** shared x,y,t,f,F - syms x y t - f = sin(x)*y; - F = [f; 2*f]; -***** test - % need the simultaneous=True flag in SymPy (matches SMT 2013b) - assert( isequal( subs(f, [x t], [t 6]), y*sin(t) )) - assert( isequal( subs(F, [x t], [t 6]), [y*sin(t); 2*y*sin(t)] )) -***** test - % swap x and y (also needs simultaneous=True - assert( isequal( subs(f, [x y], [y x]), x*sin(y) )) -***** test - % but of course both x and y to t still works - assert( isequal( subs(f, [x y], [t t]), t*sin(t) )) -***** shared -***** test - % Issue #10, subbing matrices in for scalars - syms y - a = sym([1 2; 3 4]); - f = sin(y); - g = subs(f, y, a); - assert (isequal (g, sin(a))) -***** test - % Issue #10, subbing matrices in for scalars - syms y - a = sym([1 2]); - g = subs(sin(y), {y}, {a}); - assert (isequal (g, sin(a))) -***** test - % Issue #10, subbing matrices in for scalars - syms y - a = sym([1; 2]); - g = subs(sin(y), {y}, a); - assert (isequal (g, sin(a))) -***** test - % Issue #10, subbing matrices in for scalars - syms y - a = [10 20 30]; - f = 2*y; - g = subs(f, y, a); - assert (isequal (g, 2*a)) - assert (isa (g, 'sym')) -***** test - % Issue #10, sub matrices in for two scalars - syms x y - a = [10 20 30]; - f = x^2*y; - g = subs(f, {x y}, {a a+1}); - h = a.^2.*(a+1); - assert (isequal (g, h)) -***** test - % Issue #10, sub matrices in for two scalars - syms x y z - a = [10 20 30]; - f = x^2*y; - g = subs(f, {x y}, {a z}); - h = a.^2*z; - assert (isequal (g, h)) - g = subs(f, {x y}, {a 6}); - h = a.^2*6; - assert (isequal (g, h)) -***** error - syms x y - a = [10 20 30]; - f = x^2*y; - g = subs(f, {x y}, {[10 20 30] [10 20]}); -***** test - % two inputs - syms x y - assert (isequal (subs (2*x, 6), sym(12))) - assert (isequal (subs (2*x*y^2, 6), 12*y^2)) - assert (isequal (subs (2*y, 6), sym(12))) - assert (isequal (subs (sym(2), 6), sym(2))) -***** test - % only two inputs, vector - syms x - assert (isequal (subs (2*x, [3 5]), sym([6 10]))) - assert (isequal (subs (sym(2), [3 5]), sym([2 2]))) -18 tests, 18 passed, 0 known failure, 0 skipped -[inst/@sym/harmonic.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/harmonic.m -***** error harmonic (sym(1), 2) -***** xtest - assert (isequaln (harmonic (sym(nan)), sym(nan))) -!!!!! known failure -assert (isequaln (harmonic (sym (nan)), sym (nan))) failed -***** assert (isequal (harmonic (sym(0)), sym(0))) -***** assert (isinf (harmonic (sym(inf)))) -***** assert (isequal (harmonic (sym([9 10])), [sym(7129)/2520 sym(7381)/2520])) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - y = sym('y'); - A = harmonic (7); - f = harmonic (y); - h = function_handle (f); - B = h (7); - assert (A, B, -eps) - end -6 tests, 5 passed, 1 known failure, 0 skipped -[inst/@sym/kroneckerDelta.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/kroneckerDelta.m -***** error kroneckerDelta (sym(1), 2, 3) -***** test - syms x - assert (isequal (kroneckerDelta (x, x), sym(1))) -***** assert (isequal (kroneckerDelta ([sym(1) 2 3], [1 2 0]), sym([1 1 0]))) -***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - syms x y - f = kroneckerDelta (x, y); - h = function_handle (f); - assert (h (1, 2), 0) - assert (h (2, 2), 1) - end -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/expm.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/expm.m -***** test - % scalar - syms x - assert (isequal (expm(x), exp(x))) -***** test - % diagonal - A = [sym(1) 0; 0 sym(3)]; - B = [exp(sym(1)) 0; 0 exp(sym(3))]; - assert (isequal (expm(A), B)) -***** test - % diagonal w/ x - syms x positive - A = [sym(1) 0; 0 x+2]; - B = [exp(sym(1)) 0; 0 exp(x+2)]; - assert (isequal (expm(A), B)) -***** test - % non-diagonal - syms x positive - A = [sym(1) 2; 0 x+2]; - B = expm(A); - C = double(subs(B, x, 4)); - D = expm(double(subs(A, x, 4))); - assert (max (max (abs (C - D))) <= 1e-11) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/any.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/any.m +[inst/@sym/expint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/expint.m ***** test - % matrix - a = [0 0; 1 0]; - s = sym(a); - assert (isequal (any (s), any (a))) - assert (isequal (any (s,1), any (a,1))) - assert (isequal (any (s,2), any (a,2))) + f1 = expint(sym(1)); + f2 = expint(1); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % vector - a = [0 1 0]; - s = sym(a); - assert (isequal (any (s), any (a))) - assert (isequal (any (s,1), any (a,1))) - assert (isequal (any (s,2), any (a,2))) + f1 = expint(sym(1i)); + f2 = expint(1i); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [1 2; 3 4]; + A = sym(D); + f1 = expint(A); + f2 = expint(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % should fail on symbols syms x - s = [0 1 x]; - try - any (s) - waserr = false; - catch - waserr = true; - end - assert (waserr) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/polylog.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/polylog.m -***** assert (isequal (polylog (sym('s'), 0), sym(0))) + A = expint(x); + B = expint(1, x); + assert (isequal (A, B)) ***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - assert (isequal (double (polylog (1, sym(-1))), -log(2))) - end -***** assert (isequal (double (polylog (0, sym(2))), -2)) -***** assert (isequal (double (polylog (-1, sym(2))), 2)) -***** assert (isequal (double (polylog (-2, sym(3))), -1.5)) -***** assert (isequal (double (polylog (-3, sym(2))), 26)) -***** assert (isequal (double (polylog (-4, sym(3))), -15)) -***** assert (isequal (double (polylog (1, sym(1)/2)), log(2))) + syms x + A = exp(-x)/x; + B = expint(0, x); + assert (isequal (A, B)) +***** error expint(sym(1), 2, 3) ***** test % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms s z - f = polylog (s, z); - h = function_handle (f, 'vars', [s z]); - A = h (1.1, 2.2); - B = polylog (1.1, 2.2); - assert (A, B) + if (python_cmd ('return Version(spver) > Version("1.2")')) + syms x + A = expint (3); + f = expint (x); + h = function_handle (f); + B = h (3); + assert (A, B, -eps) end -9 tests, 9 passed, 0 known failure, 0 skipped +***** error + % round trip + syms n x + f = expint (n, x); + h = function_handle (f); +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/divisors.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/divisors.m +***** test + assert( isequal( divisors(sym(150)), divisors(sym(-150)) )) +1 test, 1 passed, 0 known failure, 0 skipped [inst/@sym/symprod.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/symprod.m ***** error symprod (sym(1), 2, 3, 4, 5) @@ -11940,551 +10468,506 @@ assert (isequal (symprod(a, n, 1, oo), a^oo)) assert (isequal (symprod(a, n, 1, inf), a^oo)) 9 tests, 9 passed, 0 known failure, 0 skipped -[inst/@sym/beta.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/beta.m -***** error beta (sym(1), 2, 3) -***** assert (isequal (double (beta (sym(1), 2)), 1/2)) -***** assert (isinf (double (beta (sym(1), 0)))) -***** test - % round trip - if (python_cmd('return Version(spver) > Version("1.2")')) - syms x y - f = beta (x, y); - h = function_handle (f); - A = h (1.1, 2.2); - B = beta (1.1, 2.2); - assert (A, B) - end -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/cosh.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cosh.m -***** error cosh (sym(1), 2) -***** assert (isequaln (cosh (sym(nan)), sym(nan))) +[inst/@sym/erfinv.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfinv.m +***** error erfinv (sym(1), 2) +***** assert (isequaln (erfinv (sym(nan)), sym(nan))) ***** shared x, d - d = 1; - x = sym('1'); + d = 1/2; + x = sym('1/2'); ***** test - f1 = cosh(x); - f2 = cosh(d); + f1 = erfinv(x); + f2 = erfinv(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = cosh(A); - f2 = cosh(D); + f1 = erfinv(A); + f2 = erfinv(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - A = cosh (d); - f = cosh (y); + A = erfinv (d); + f = erfinv (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ezsurf.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ezsurf.m -***** error - syms u v t - ezsurf(u*v, 2*u*v, 3*v*t) -***** error - syms u v t - ezsurf(u*v, 2*u*v, u*v*t) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/round.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/round.m -***** test - d = 3/2; - x = sym('3/2'); - f1 = round(x); - f2 = round(d); - assert (isequal (f1, f2)) -***** test - d = 5/2; - x = sym('5/2'); - f1 = round(x); - f2 = round(d); - assert (isequal (f1, f2)) +[inst/@sym/besseli.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besseli.m ***** test - D = [1.1 4.6; -3.4 -8.9]; - A = [sym(11)/10 sym(46)/10; sym(-34)/10 sym(-89)/10]; - f1 = round(A); - f2 = round(D); - assert( isequal (f1, f2)) + X = [1 2 3; 4 5 6]; + ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; + n = double(ns); + A = double(besseli(ns, X)); + B = besseli(n, X); + assert (all (all (abs (A - B) < 100*eps*abs(A)))) ***** test - d = sym(-11)/10; - c = -1; - assert (isequal (round (d), c)) + % roundtrip + syms x + A = besseli(2, 10); + q = besseli(2, x); + h = function_handle(q); + B = h(10); + assert (abs (A - B) <= eps*abs(A)) +***** error besseli(sym('x')) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/zeta.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/zeta.m +***** error zeta (sym(1), 2, 3) +***** assert (isequaln (zeta (sym(nan)), sym(nan))) ***** test - d = sym(-19)/10; - c = -2; - assert (isequal (round (d), c)) + f1 = zeta (sym(2)); + f2 = pi^2/6; + assert (double (f1), f2, -1e-15) ***** test - d = 5j/2; - x = sym(5j)/2; - f1 = round (x); - f2 = round (d); - assert (isequal (f1, f2)) + A = sym([0 2; 4 6]); + f1 = zeta (A); + f2 = [-1/2 pi^2/6; pi^4/90 pi^6/945]; + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - d = 5/3 - 4j/7; - x = sym(5)/3 - sym(4j)/7; - f1 = round (x); - f2 = round (d); - assert (isequal (f1, f2)) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/triu.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/triu.m + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + y = sym('y'); + f = zeta (y); + h = function_handle (f); + A = zeta (2); + B = h (2); + assert (A, B, -eps) + end +***** xtest + % https://github.com/sympy/sympy/issues/11802 + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + assert (double (zeta (sym (3), 4)), -0.07264084989132137196, -1e-14) + end +!!!!! known failure +Python exception: RecursionError: maximum recursion depth exceeded in __instancecheck__ + occurred at line 6 of the Python code block: + x = complex(x) ***** test - % scalar + if (python_cmd ('return Version(spver) > Version("1.1.1")')) syms x - assert (isequal (triu(x), x)) - assert (isequal (triu(x,0), x)) - assert (isequal (triu(x,1), 0)) - assert (isequal (triu(x,-1), 0)) + assert (isequal (zeta (0, x), zeta(x))) + end +***** test + % ensure its the nth deriv wrt x, not the n deriv + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + syms x n + F = zeta (n, x); + F = subs(F, n, 3); + assert (isequal (F, diff (zeta (x), x, x, x))) + end +8 tests, 7 passed, 1 known failure, 0 skipped +[inst/@sym/nnz.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/nnz.m +***** assert (nnz (sym ([1])) == 1) +***** assert (nnz (sym ([0])) == 0) +***** assert (nnz (sym ([])) == 0) +***** assert (nnz (sym ([1 0; 0 3])) == 2) ***** test - % with symbols syms x - A = [x 2*x; 3*x 4*x]; - assert (isequal (triu(A), [x 2*x; 0 4*x])) + assert (nnz ([x 0]) == 1) +***** assert (nnz (sym (true)) == 1) +***** assert (nnz (sym (false)) == 0) +***** assert (nnz (sym (inf)) == 1) +***** assert (nnz (sym (nan)) == 1) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/atanh.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/atanh.m +***** error atanh (sym(1), 2) +***** assert (isequaln (atanh (sym(nan)), sym(nan))) +***** shared x, d + d = 1/2; + x = sym('1/2'); ***** test - % diagonal shifts - B = round(10*rand(3,4)); - A = sym(B); - assert (isequal (triu(A), triu(B))) - assert (isequal (triu(A,0), triu(B,0))) - assert (isequal (triu(A,1), triu(B,1))) - assert (isequal (triu(A,-1), triu(B,-1))) + f1 = atanh(x); + f2 = atanh(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % double array pass through - B = round(10*rand(3,4)); - assert (isequal (triu(B,sym(1)), triu(B,1))) - assert (isa (triu(B,sym(1)), 'double')) + D = [d d; d d]; + A = [x x; x x]; + f1 = atanh(A); + f2 = atanh(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % immutable test - A = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); - assert (isequal (triu (A), sym ([1 2; 0 4]))) - assert (isequal (tril (A), sym ([1 0; 3 4]))) + % round trip + y = sym('y'); + A = atanh (d); + f = atanh (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ezcontour.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ezcontour.m -***** error - syms x y z - ezcontour (x*y*z) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/fresnelc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/fresnelc.m +[inst/@sym/qr.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/qr.m ***** test - a = fresnelc(sym(0)); - assert (isequal (a, sym(0))) + % scalar + [q, r] = qr(sym(6)); + assert (isequal (q, sym(1))) + assert (isequal (r, sym(6))) + syms x + [q, r] = qr(x); + assert (isequal (q*r, x)) + % could hardcode this if desired + %assert (isequal (q, sym(1))) + %assert (isequal (r, x)) ***** test - b = fresnelc(sym('oo')); - assert (isequal (b, sym(1)/2)) + A = [1 2; 3 4]; + B = sym(A); + [Q, R] = qr(B); + assert (isequal (Q*R, B)) + assert (isequal (R(2,1), sym(0))) + assert (isequal (Q(:,1)'*Q(:,2), sym(0))) + %[QA, RA] = qr(A) + %assert ( max(max(double(Q)-QA)) <= 10*eps) + %assert ( max(max(double(Q)-QA)) <= 10*eps) ***** test - % values in a matrix - syms x - a = fresnelc([sym(0) sym('oo') x 1]); - b = [sym(0) sym(1)/2 fresnelc(x) fresnelc(sym(1))]; - assert (isequal (a, b)) + % non square: tall skinny + A = sym([1 2; 3 4; 5 6]); + [Q, R] = qr (A, 0); + assert (size (Q), [3 2]) + assert (size (R), [2 2]) + assert (isequal (Q*R, A)) +***** error + % non square: short fat: not yet implemented upstream + [Q, R] = qr (sym([1 2]), 0); +***** error + [Q, R, P] = qr (sym(1)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/fortran.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/fortran.m +***** shared x,y,z + syms x y z ***** test - % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - f = fresnelc (x); - h = function_handle (f); - A = h (1.1); - B = fresnelc (1.1); - assert (A, B) - end -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/det.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/det.m -***** assert (isequal (det(sym([])), 1)) + % basic test + f = x*sin(y) + abs(z); + source = fortran(f); + expected = ' x*sin(y) + abs(z)'; + s1 = strrep (expected, 'abs', 'Abs'); + assert (strcmp (source, expected) || strcmp (source, s1)) ***** test - syms x y real - assert (isequal (det([x 5; 7 y]), x*y-35)) + % output test + f = x*sin(y) + abs(z); + [F,H] = fortran(f, 'file', '', 'show_header', false); + expected_h_code = sprintf('\ninterface\nREAL*8 function myfun(x, y, z)\nimplicit none\nREAL*8, intent(in) :: x\nREAL*8, intent(in) :: y\nREAL*8, intent(in) :: z\nend function\nend interface\n\n'); + expected_f_code = sprintf('\nREAL*8 function myfun(x, y, z)\nimplicit none\nREAL*8, intent(in) :: x\nREAL*8, intent(in) :: y\nREAL*8, intent(in) :: z\n\nmyfun = x*sin(y) + abs(z)\n\nend function\n'); + assert(strcmp(F.name, 'file.f90')) + assert(strcmp(H.name, 'file.h')) + %disp(expected_f_code); disp(F.code) + s1 = strrep (expected_f_code, 'abs', 'Abs'); + s2 = strrep (expected_f_code, sprintf ('\n'), sprintf ('\r\n')); + s3 = strrep (s2, 'abs', 'Abs'); + s4 = strrep (expected_h_code, sprintf ('\n'), sprintf ('\r\n')); + assert (strcmp (F.code, expected_f_code) || strcmp (F.code, s1) || strcmp (F.code, s2) || strcmp (F.code, s3)) + assert (strcmp (H.code, expected_h_code) || strcmp (H.code, s4)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/besselyn.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselyn.m ***** test + % roundtrip syms x - assert (isequal (det(x), x)) - assert (isequal (det(sym(-6)), sym(-6))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/hilb.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/hilb.m + A = double(besselyn(sym(2), sym(10))); + q = besselyn(sym(2), x); + h = function_handle(q); + B = h(10); + assert (abs (A - B) <= eps) +***** error yn(sym('x')) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/display.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/display.m ***** test - A = hilb (sym(3)); - B = [sym(1) sym(1)/2 sym(1)/3; sym(1)/2 sym(1)/3 sym(1)/4; sym(1)/3 sym(1)/4 sym(1)/5]; - assert (isequal (A, B)) + assert(true) 1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/potential.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/potential.m -***** error potential (sym(1), 2, 3, 4) -***** shared x,y,z - syms x y z +[inst/@sym/cot.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/cot.m +***** error cot (sym(1), 2) +***** assert (isequaln (cot (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - % 1D - f = 3*x^2; - F = x^3; - assert (isequal (potential(f), F)) - assert (isequal (potential(f, x), F)) - assert (isequal (potential(f, x, 0), F)) - assert (isequal (potential(f, x, 2), F - 8)) + f1 = cot(x); + f2 = cot(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - F = x*exp(y) + (z-1)^2; - f = gradient(F); - G = potential(f, [x;y;z], [0;1;1]); - assert (isAlways (G == F)) + D = [d d; d d]; + A = [x x; x x]; + f1 = cot(A); + f2 = cot(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - F = x*exp(y); - f = gradient(F); - G = potential(f); - assert (isAlways (G == F)) + % round trip + y = sym('y'); + A = cot (d); + f = cot (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/isprime.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isprime.m +***** assert (isprime (sym(5))) +***** assert (~isprime (sym(4))) +***** assert (~isprime (sym(0))) +***** assert (~isprime (sym(1))) ***** test - % no potential exists - syms x y - a = [x; x*y^2]; - assert (isnan (potential (a))) -***** shared -***** xtest - % fails b/c of sympy #8458 (piecewise expr that should simplify) - syms x - f = cos(x); - assert (isequal (potential(f, x), sin(x))) -!!!!! known failure -assert (isequal (potential (f, x), sin (x))) failed -6 tests, 5 passed, 1 known failure, 0 skipped -[inst/@sym/cat.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cat.m + a = [5 7 6; 1 2 337]; + assert (isequal (isprime (a), [true true false; false true true])) +***** assert (~isprime(sym(-4))) +***** assert (~isprime(sym(4i))) +***** assert (~isprime(sym(3)/5)) +***** error + isprime(sym('x')); +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/assume.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/assume.m ***** test - % mostly tested in horzcat, vertcat: one for good measure syms x - assert (isequal (cat(1, x, x), [x x])) - assert (isequal (cat(2, x, x), [x; x])) -***** error cat(3, sym(2), sym(3)) -***** error cat(0, sym(2), sym(3)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/igamma.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/igamma.m -***** test - % mostly tested in @sym/gammainc + x = assume(x, 'positive'); + a = assumptions(x); + assert(strcmp(a, 'x: positive')) + x = assume(x, 'even'); + a = assumptions(x); + assert(strcmp(a, 'x: even')) + x = assume(x, 'odd'); + a = assumptions(x); + assert(strcmp(a, 'x: odd')) +***** error syms x - assert (isequal (igamma (2, x), gammainc(x, 2, 'upper'))) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@sym/ellipticPi.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticPi.m -***** error ellipticPi (sym (1)) -***** error ellipticPi (sym (1), 2, 3, 4) -***** assert (double (ellipticPi (sym (-23)/10, sym (pi)/4, 0)), 0.5876852228, 10e-11) -***** assert (double (ellipticPi (sym (1)/3, sym (pi)/3, sym (1)/2)), 1.285032276, 10e-11) -***** assert (double (ellipticPi (sym (2), sym (pi)/6, sym (2))), 0.7507322117, 10e-11) -***** xtest - % FIXME: search/report upstream - assert (double (ellipticPi (sym (-1), 0, sym (1))), 0) -!!!!! known failure -ASSERT errors for: assert (double (ellipticPi (sym (-1), 0, sym (1))),0) - - Location | Observed | Expected | Reason - () NaN 0 'NaN' mismatch + x = assume (x, x); +***** error + syms x + x = assume (x/pi, 'integer') ***** test - % compare to Maple, complete - us = vpa (ellipticPi (sym(1)/6, sym(4)/3), 40); - % > evalf(EllipticPi(sin(1/6), sqrt(4/3)), 40); - maple = vpa ('2.019271696236161760696477679310987869058', 40) - ... - vpa ('1.708165765120289929280805062355360570830j', 40); - assert (abs (double (maple - us)), 0, 2e-39) + % multiple assumptions + syms x + x = assume(x, 'positive', 'integer'); + [tilde, a] = assumptions(x, 'dict'); + assert(a{1}.integer) + assert(a{1}.positive) ***** test - % compare to Maple, incomplete - us = vpa (ellipticPi (sym(8)/7, sym(4)/3, sym(2)/7), 40); - % > evalf(EllipticPi(sin(4/3), 8/7, sqrt(2/7)), 40); - maple = vpa ('2.089415796799294830305265090302275542033', 40) - ... - vpa ('4.798862045930802761256228043192491271947j', 40); - assert (abs (double (maple - us)), 0, 6e-39) -8 tests, 7 passed, 1 known failure, 0 skipped -[inst/@sym/lt.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/lt.m + % multiple assumptions + syms x + x = assume(x, 'even', 'positive'); + [tilde, a] = assumptions(x, 'dict'); + assert(a{1}.even) + assert(a{1}.positive) ***** test - % simple - x = sym(1); y = sym(1); e = x < y; - assert (~logical (e)) - x = sym(1); y = sym(2); e = x < y; - assert (logical (e)) + % has output so avoids workspace + syms x positive + x2 = x; + f = sin(x); + x = assume(x, 'negative'); + a = assumptions(x); + assert(strcmp(a, 'x: negative')) + a = assumptions(x2); + assert(strcmp(a, 'x: positive')) + a = assumptions(f); + assert(strcmp(a, 'x: positive')) ***** test - % mix sym and double - x = sym(1); y = 1; e = x < y; - assert (~logical (e)) - x = sym(1); y = 2; e = x < y; - assert (logical (e)) - x = 1; y = sym(1); e = x < y; - assert (~logical (e)) - x = 1; y = sym(2); e = x < y; - assert (logical (e)) + % clear: has output so avoids workspace + syms x positive + f = 2*x; + x2 = assume(x, 'clear'); + assert (~ isempty (assumptions (f))); ***** test - % Type of the output is sym or logical? - % FIXME: in current version, they are sym - x = sym(1); y = sym(1); e1 = x < y; - x = sym(1); y = sym(2); e2 = x < y; - %assert (islogical (e1)) - %assert (islogical (e2)) - assert (isa (e1, 'sym')) - assert (isa (e2, 'sym')) + % has no output so does workspace + syms x positive + x2 = x; + f = sin(x); + assume(x, 'negative'); + a = assumptions(x); + assert(strcmp(a, 'x: negative')) + a = assumptions(x2); + assert(strcmp(a, 'x: negative')) + a = assumptions(f); + assert(strcmp(a, 'x: negative')) ***** test - % ineq w/ symbols - syms x y - e = x < y; - assert (~islogical (e)) - assert (isa (e, 'sym')) + % clear: has not output so does workspace + syms x positive + f = 2*x; + assume(x, 'clear'); + assert (isempty (assumptions (f))); + assert (isempty (assumptions ())); ***** test - % array -- array + syms x positive + assume (x, 'clear') + assert (isempty (assumptions ())) +***** error syms x - a = sym([1 3 3 2*x]); - b = sym([2 x 3 10]); - e = a < b; - assert (isa (e, 'sym')) - assert (logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 3 < x)) - assert (~logical (e(3))) - assert (isa (e(4), 'sym')) - assert (isequal (e(4), 2*x < 10)) + x2 = assume (x, 'clear', 'real'); +***** error + syms a + assume (a > 0) ***** test - % array -- scalar - syms x oo - a = sym([1 x oo]); - b = sym(3); - e = a < b; - assert (isa (e, 'sym')) - assert (logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), x < 3)) - assert (~logical (e(3))) + syms x y + assume ([x y], 'real') + assert (strcmp (assumptions (x), 'x: real')) + assert (strcmp (assumptions (y), 'y: real')) ***** test - % scalar -- array - syms x oo - a = sym(1); - b = sym([2 x -oo]); - e = a < b; - assert (isa (e, 'sym')) - assert (logical (e(1))) - assert (isa (e(2), 'sym')) - assert (isequal (e(2), 1 < x)) - assert (~logical (e(3))) + syms x y + assume ([x y], 'positive', 'even') + assert (strcmp (assumptions (x), 'x: positive, even') || strcmp (assumptions (x), 'x: even, positive')) + assert (strcmp (assumptions (y), 'y: positive, even') || strcmp (assumptions (y), 'y: even, positive')) ***** test - % ineq w/ nan - syms x - snan = sym(nan); - e = x < snan; - assert (~logical (e)) - e = snan < x; - assert (~logical (e)) - b = [sym(0) x]; - e = b < snan; - assert (isequal (e, [false false])) + % with output, original x and y are unchanged + syms x y + [p, q] = assume ([x y], 'real'); + assert (isempty (assumptions (x))) + assert (isempty (assumptions (y))) + assert (strcmp (assumptions (p), 'x: real')) + assert (strcmp (assumptions (q), 'y: real')) ***** test - % oo - syms oo x - e = oo < x; - assert (isa (e, 'sym')) - assert (strcmp (strtrim (disp (e, 'flat')), 'oo < x')) + % matrix input + syms a b c d + assume ([a b; c d], 'real') + assert (strcmp (assumptions (a), 'a: real')) + assert (strcmp (assumptions (b), 'b: real')) + assert (strcmp (assumptions (c), 'c: real')) + assert (strcmp (assumptions (d), 'd: real')) +16 tests, 16 passed, 0 known failure, 0 skipped +[inst/@sym/sind.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sind.m +***** error sind (sym(1), 2) +***** assert (isequaln (sind (sym(nan)), sym(nan))) ***** test - % sympy true matrix - a = sym([1 3 3]); - b = sym([2 4 1]); - e = a < b; - %assert (~isa (e, 'sym')) - %assert (islogical (e)) - assert (isequal (e, [true true false])) + f1 = sind (sym(1)); + f2 = sind (1); + assert (double (f1), f2, -eps) ***** test - % oo, finite real variables - syms oo - syms z real - assumeAlso(z, 'finite') - e = -oo < z; - assert (isequal (e, sym(true))) - e = z < oo; - assert (isequal (e, sym(true))) + D = [10 30; 110 -45]; + A = sym(D); + f1 = sind (A); + f2 = sind (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/prod.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/prod.m +***** error prod (sym(1), 2, 3) +***** error prod (sym(1), 42) +***** shared x,y,z + syms x y z +***** assert (isequal (prod (x), x)) +***** assert (isequal (prod ([x y z]), x*y*z)) +***** assert (isequal (prod ([x; y; z]), x*y*z)) +***** assert (isequal (prod ([x y z], 1), [x y z])) +***** assert (isequal (prod ([x y z], 2), x*y*z)) +***** shared a,b + b = [1 2; 3 4]; a = sym(b); +***** assert (isequal (prod(a), prod(b))) +***** assert (isequal (prod(a,1), prod(b,1))) +***** assert (isequal (prod(a,2), prod(b,2))) ***** test - % -oo, positive var (known failure w/ sympy 0.7.6.x) - syms oo - syms z positive - e = -oo < z; - assert (logical (e)) - assert (isequal (e, sym(true))) + % weird inputs + a = prod('xx', sym(1)); + assert (isequal (a, sym('xx'))) +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/triu.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/triu.m ***** test - % positive - syms z positive - e = -1 < z; - assert (isequal (e, sym(true))) + % scalar + syms x + assert (isequal (triu(x), x)) + assert (isequal (triu(x,0), x)) + assert (isequal (triu(x,1), 0)) + assert (isequal (triu(x,-1), 0)) ***** test - syms oo - z = sym('z', 'negative'); - e = z < oo; - assert (isequal (e, sym(true))) -14 tests, 14 passed, 0 known failure, 0 skipped -[inst/@sym/nextprime.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/nextprime.m -***** assert (isequal (nextprime(sym(2)), 3)); -***** assert (isequal (nextprime(sym(18)), 19)); -***** assert (isequal (nextprime(sym([1 2 3])), [2 3 5])); -***** assert (isequal (nextprime(sym([-1 0])), [2 2])); + % with symbols + syms x + A = [x 2*x; 3*x 4*x]; + assert (isequal (triu(A), [x 2*x; 0 4*x])) ***** test - % result is a sym - p = nextprime(sym(2)); - assert (isa (p, 'sym')) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/signIm.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/signIm.m -***** assert (isequal (signIm (sym(1)), sym(0))) -***** assert (isequal (signIm (sym(1) + 2i), sym(1))) -***** assert (isequal (signIm (sym(1) - 2i), sym(-1))) + % diagonal shifts + B = round(10*rand(3,4)); + A = sym(B); + assert (isequal (triu(A), triu(B))) + assert (isequal (triu(A,0), triu(B,0))) + assert (isequal (triu(A,1), triu(B,1))) + assert (isequal (triu(A,-1), triu(B,-1))) ***** test - % intermediate A looks bit weird, but it works - syms z - A = signIm (z); - assert (isequal (subs(A, z, 3+sym(4i)), sym(1))) - assert (isequal (subs(A, z, 3-sym(4i)), sym(-1))) + % double array pass through + B = round(10*rand(3,4)); + assert (isequal (triu(B,sym(1)), triu(B,1))) + assert (isa (triu(B,sym(1)), 'double')) ***** test - % really a @sym/sign test, but that one is autogen - z = 3 + sym(4i); - A = sign (z); - B = z / abs(z); - assert (double (A), double (B), eps) + % immutable test + A = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); + assert (isequal (triu (A), sym ([1 2; 0 4]))) + assert (isequal (tril (A), sym ([1 0; 3 4]))) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/fix.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/fix.m -***** test - d = 3/2; - x = sym('3/2'); - f1 = fix(x); - f2 = fix(d); - assert (isequal (f1, f2)) -***** test - D = [1.1 4.6; -3.4 -8.9]; - A = [sym(11)/10 sym(46)/10; sym(-34)/10 sym(-89)/10]; - f1 = fix(A); - f2 = fix(D); - assert( isequal (f1, f2)) -***** test - d = sym(-11)/10; - c = -1; - assert (isequal (fix (d), c)) +[inst/@sym/union.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/union.m ***** test - d = sym(-19)/10; - c = -1; - assert (isequal (fix (d), c)) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/erfinv.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfinv.m -***** error erfinv (sym(1), 2) -***** assert (isequaln (erfinv (sym(nan)), sym(nan))) -***** shared x, d - d = 1/2; - x = sym('1/2'); + A = sym([1 2 3]); + B = sym([1 2 4]); + C = union(A, B); + D = sym([1 2 3 4]); + assert (isequal (C, D)) ***** test - f1 = erfinv(x); - f2 = erfinv(d); - assert( abs(double(f1) - f2) < 1e-15 ) + % one nonsym + A = sym([1 2 3]); + B = [1 2 4]; + C = union(A, B); + D = sym([1 2 3 4]); + assert (isequal (C, D)) ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = erfinv(A); - f2 = erfinv(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % empty + A = sym([1 2 3]); + C = union(A, A); + assert (isequal(C, A)) ***** test - % round trip - y = sym('y'); - A = erfinv (d); - f = erfinv (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/times.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/times.m + % empty input + A = sym([1 2]); + C = union(A, []); + assert (isequal (C, sym([1 2]))) ***** test % scalar syms x - assert (isa (x.*2, 'sym')) - assert (isequal (x.*2, x*2)) - assert (isequal (2.*sym(3), sym(6))) - assert (isequal (sym(2).*3, sym(6))) -***** test - % matrix-matrix and matrix-scalar - D = [0 1; 2 3]; - A = sym(D); - assert (isequal ( 2.*A , 2*D )) - assert (isequal ( A.*2 , 2*D )) - assert (isequal ( A.*A , D.*D )) - assert (isequal ( A.*D , D.*D )) - assert (isequal ( D.*A , D.*D )) + assert (isequal (union([x 1], x), [1 x])) + assert (isequal (union(x, x), x)) ***** test - % immutable test - A = sym([1 2]); - B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)]])'); - assert (isequal (A.*A, B.*B)) + A = interval(sym(1), 3); + B = interval(sym(2), 5); + C = union(A, B); + assert( isequal( C, interval(sym(1), 5))) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@sym/setdiff.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/setdiff.m ***** test - % MatrixSymbol test - A = sym([1 2; 3 4]); - B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); - C = sym('MatrixSymbol("C", 2, 2)'); - assert (~ isempty (strfind (sympy (C.*C), 'Hadamard'))) - assert (~ isempty (strfind (sympy (A.*C), 'Hadamard'))) - assert (~ isempty (strfind (sympy (C.*A), 'Hadamard'))) - assert (~ isempty (strfind (sympy (B.*C), 'Hadamard'))) - assert (~ isempty (strfind (sympy (C.*B), 'Hadamard'))) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@sym/erfc.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfc.m -***** error erfc (sym(1), 2) -***** assert (isequaln (erfc (sym(nan)), sym(nan))) -***** shared x, d - d = 1; - x = sym('1'); + A = sym([1 2 3]); + B = sym([1 2 4]); + C = setdiff(A, B); + D = sym([3]); + assert (isequal (C, D)) ***** test - f1 = erfc(x); - f2 = erfc(d); - assert( abs(double(f1) - f2) < 1e-15 ) + % one nonsym + A = sym([1 2 3]); + B = [1 2 4]; + C = setdiff(A, B); + D = sym([3]); + assert (isequal (C, D)) ***** test - D = [d d; d d]; - A = [x x; x x]; - f1 = erfc(A); - f2 = erfc(D); - assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + % empty + A = sym([1 2 3]); + C = setdiff(A, A); + assert (isempty (C)) ***** test - % round trip - y = sym('y'); - A = erfc (d); - f = erfc (y); - h = function_handle (f); - B = h (d); - assert (A, B, -eps) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/numdem.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/numdem.m -***** error numdem (sym(1), 2) + % empty input + A = sym([1 2]); + C = setdiff(A, []); + assert (isequal (C, A) || isequal (C, sym([2 1]))) ***** test + % scalar syms x - [n, d] = numdem(1/x); - assert (isequal (n, sym(1)) && isequal (d, x)) -***** test - syms x y - n1 = [sym(1); x]; - d1 = [x; y]; - [n, d] = numdem(n1 ./ d1); - assert (isequal (n, n1) && isequal (d, d1)) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/cross.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/cross.m -***** error cross (sym(1), 2, 3) -***** test - a = sym([1; 0; 0]); - b = sym([0; 1; 0]); - c = cross(a, b); - assert (isequal (c, sym([0; 0; 1]))) + assert (isequal (setdiff([x 1], x), sym(1))) + assert (isempty (setdiff(x, x))) ***** test - syms x - a = sym([x; 0; 0]); - b = sym([0; 1; 0]); - c = cross(a, b); - assert (isequal (c, sym([0; 0; x]))) -3 tests, 3 passed, 0 known failure, 0 skipped + A = interval(sym(1), 3); + B = interval(sym(2), 5); + C = setdiff(A, B); + assert( isequal( C, interval(sym(1), 2, false, true))) +6 tests, 6 passed, 0 known failure, 0 skipped [inst/@sym/size.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/size.m ***** test @@ -12549,243 +11032,441 @@ !!!!! known failure assert (isequaln (size (A), [NaN, 0])) failed 7 tests, 4 passed, 3 known failures, 0 skipped -[inst/@sym/diff.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/diff.m -***** shared x,y,z - syms x y z +[inst/@sym/rows.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/rows.m ***** test - % basic - assert(logical( diff(sin(x)) - cos(x) == 0 )) - assert(logical( diff(sin(x),x) - cos(x) == 0 )) - assert(logical( diff(sin(x),x,x) + sin(x) == 0 )) + a = sym([1 2 3]); + assert (rows(a) == 1) ***** test - % these fail when doubles are not converted to sym - assert(logical( diff(sin(x),x,2) + sin(x) == 0 )) - assert(logical( diff(sym(1),x) == 0 )) - assert(logical( diff(1,x) == 0 )) - assert(logical( diff(pi,x) == 0 )) + a = sym([1 2 3; 4 5 6]); + assert (rows(a) == 2) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/logspace.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/logspace.m ***** test - % symbolic diff of const (w/o variable) fails in sympy, but we work around - assert (isequal (diff(sym(1)), sym(0))) + % default argument for N + A = logspace(0, 2); + assert (length (A) == 50); ***** test - % nth symbolic diff of const - assert (isequal (diff(sym(1), 2), sym(0))) - assert (isequal (diff(sym(1), sym(1)), sym(0))) + % special case: pi as end pt + A = logspace(-sym(3), sym(pi), 3); + assert (isequal (A(end), sym(pi))) ***** test - % octave's vector difference still works - assert(isempty(diff(1))) - assert((diff([2 6]) == 4)) + A = logspace(-sym(4), 0, 3); + B = [sym(1)/10000 sym(1)/100 sym(1)]; + assert (isequal (A, B)) ***** test - % other forms - f = sin(x); - g = diff(f,x,2); - assert (isequal (diff(f,2), g)) - assert (isequal (diff(f,sym(2)), g)) - g = diff(f,x); - assert (isequal (diff(f), g)) - assert (isequal (diff(f,1), g)) + % vpa support, might need recent sympy for sympy issue #10063 + n = 32; + A = logspace(-vpa(1,n), 0, 3); + B = [10^(-vpa(1,n)) 10^(-vpa(sym(1)/2,n)) vpa(1,n)]; + assert (isequal (A, B)) + assert (max(abs(double(A) - logspace(-1, 0, 3))) < 1e-15) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/erfi.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/erfi.m +***** error erfi (sym(1), 2) +***** assert (isequaln (erfi (sym(nan)), sym(nan))) +***** shared x, d + d = 0; + x = sym('0'); ***** test - % old SMT supported (still does?) the 'n' before the 'x' - % we might remove this someday, no longer seems documented in SMT - f = sin(x); - g = diff(f,x,2); - assert (isequal (diff(f,2,x), g)) - assert (isequal (diff(f,sym(2),x), g)) - g = diff(f,x); - assert (isequal (diff(f,1,x), g)) + f1 = erfi(x); + f2 = 0; + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % matrix - A = [x sin(x); x*y 10]; - B = [1 cos(x); y 0]; - assert(isequal(diff(A,x),B)) + D = [d d; d d]; + A = [x x; x x]; + f1 = erfi(A); + f2 = 0; + f2 = [f2 f2; f2 f2]; + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test - % bug: use symvar - a = x*y; - b = diff(a); - assert (isequal (b, y)) + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + y = sym('y'); + A = erfi (d); + f = erfi (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) + end +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/harmonic.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/harmonic.m +***** error harmonic (sym(1), 2) +***** xtest + assert (isequaln (harmonic (sym(nan)), sym(nan))) +!!!!! known failure +assert (isequaln (harmonic (sym (nan)), sym (nan))) failed +***** assert (isequal (harmonic (sym(0)), sym(0))) +***** assert (isinf (harmonic (sym(inf)))) +***** assert (isequal (harmonic (sym([9 10])), [sym(7129)/2520 sym(7381)/2520])) ***** test - % bug: symvar should be used on the matrix, not comp-by-comp - a = [x y x*x]; - b = diff(a); - assert (~isequal (b(2), 1)) - assert (isequal (b, [1 0 2*x])) - b = diff(a,1); - assert (~isequal (b(2), 1)) - assert (isequal (b, [1 0 2*x])) -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@sym/atan.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/atan.m -***** error atan (sym(1), 2) -***** assert (isequaln (atan (sym(nan)), sym(nan))) + % round trip + if (python_cmd ('return Version(spver) > Version("1.2")')) + y = sym('y'); + A = harmonic (7); + f = harmonic (y); + h = function_handle (f); + B = h (7); + assert (A, B, -eps) + end +6 tests, 5 passed, 1 known failure, 0 skipped +[inst/@sym/reshape.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/reshape.m +***** test + d = [2 4 6; 8 10 12]; + a = sym(d); + assert (isequal (reshape(a, [1 6]), reshape(d, [1 6]))) + assert (isequal (reshape(a, 1, 6), reshape(d, 1, 6))) + assert (isequal (reshape(a, 2, 3), reshape(d, 2, 3))) + assert (isequal (reshape(a, 3, 2), reshape(d, 3, 2))) + assert (isequal (reshape(a, 6, 1), reshape(d, 6, 1))) +***** shared x, a, d + syms x + a = [1 x^2 x^4; x x^3 x^5]; + d = [0 2 4; 1 3 5]; + +***** test + b = reshape(a, [1 6]); + assert (isequal (size(b), [1 6])) + assert (isequal (b, x.^reshape(d,1,6))) + +***** test + b = reshape(a, [6 1]); + assert (isequal (size(b), [6 1])) + assert (isequal (b, x.^reshape(d,6,1))) + b = reshape(b, size(a)); + assert (isequal (size(b), [2 3])) + assert (isequal (b, a)) + +***** test + b = a(:); + assert( isequal (size(b), [6 1])) + assert( isequal (b, x.^(d(:)))) + +***** test + % reshape scalar + assert (logical( reshape(x, 1, 1) == x )) + assert (logical( reshape(x, [1 1]) == x )) +***** shared a + syms a +***** error reshape(a, 2, 1) +***** error reshape(a, 1, 2) +***** error reshape(a, 1, 1, 1) +***** error reshape(a, [1, 1, 1]) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/acos.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acos.m +***** error acos (sym(1), 2) +***** assert (isequaln (acos (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = atan(x); - f2 = atan(d); + f1 = acos(x); + f2 = acos(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = atan(A); - f2 = atan(D); + f1 = acos(A); + f2 = acos(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip y = sym('y'); - A = atan (d); - f = atan (y); + A = acos (d); + f = acos (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/divergence.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/divergence.m -***** shared x,y,z - syms x y z +[inst/@sym/laguerreL.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/laguerreL.m +***** shared x + syms x +***** assert (isequal (laguerreL(0, x), sym(1))) +***** assert (isequal (laguerreL(1, x), 1-x)) +***** assert (isequal (laguerreL(2, x), x^2/2 - 2*x + 1)) +***** error laguerreL(-1, x) +***** error laguerreL(x) +***** error laguerreL(1, 2, x, 3) +***** shared ***** test - % 1D - f = x^2; - assert (isequal (divergence(f), diff(f,x))) - assert (isequal (divergence(f,{x}), diff(f,x))) - assert (isequal (divergence(f,[x]), diff(f,x))) - assert (isequal (divergence(f,x), diff(f,x))) + syms x n + L = laguerreL([2 n], x); + expected = [laguerreL(2, x) laguerreL(n, x)]; + assert (isequal (L, expected)) ***** test - % const - f = [sym(1); 2; exp(sym(3))]; - assert (isequal (divergence(f,{x,y,z}), 0)) - f = [sym(1); 2; exp(sym('c'))]; - assert (isequal (divergence(f,{x,y,z}), 0)) + syms x y + L = laguerreL([1; 2], [x; y]); + expected = [laguerreL(1, x); laguerreL(2, y)]; + assert (isequal (L, expected)) ***** test - % double const - f = [1 2]; - g = sym(0); - assert (isequal (divergence(f, [x y]), g)) - % should fail, calls @double: divergence(f, {x y}), g)) + syms x n + assert (isequal (laguerreL(n, 0, x), laguerreL(n, x))) +***** shared x, y, n + syms x y n +***** assert (isequal (laguerreL([1 n], 0, x), laguerreL([1 n], x))) ***** test - % 1D fcn in 2d/3d - f = [x y z]; - assert (isequal (divergence(f), 3)) - assert (isequal (divergence(f, {x,y,z}), 3)) - assert (isequal (divergence(f, [x,y,z]), 3)) + L = laguerreL([1; n], [pi; 0], [x; y]); + expected = [laguerreL(1, pi, x); laguerreL(n, 0, y)]; + assert (isequal (L, expected)) ***** test - % 2d fcn in 2d/3d - f = sin(exp(x)*y+sinh(z)); - g2 = [diff(f,x); diff(f,y)]; - l2 = diff(g2(1),x) + diff(g2(2),y); - g3 = [diff(f,x); diff(f,y); diff(f,z)]; - l3 = diff(g3(1),x) + diff(g3(2),y) + diff(g3(3),z); - assert (isequal (divergence(g2, {x,y}), l2)) - assert (isequal (divergence(g3, {x,y,z}), l3)) -***** error divergence ([1 2], [sym('x')]) -***** error divergence ([1 2], sym('x'), 42) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/besseljn.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/besseljn.m + L = laguerreL([1 n], [pi 0], x); + expected = [laguerreL(1, pi, x) laguerreL(n, 0, x)]; + assert (isequal (L, expected)) ***** test - % roundtrip - syms x - A = double(besseljn(sym(2), sym(9))); - q = besseljn(sym(2), x); - h = function_handle(q); - B = h(9); - assert (abs (A - B) <= eps) -***** error jn(sym('x')) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/minus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/minus.m + L = laguerreL([1 n], pi, [x y]); + expected = [laguerreL(1, pi, x) laguerreL(n, pi, y)]; + assert (isequal (L, expected)) ***** test - % scalar - syms x - assert (isa (x-1, 'sym')) - assert (isa (x-x, 'sym')) - assert (isequal (x-x, sym(0))) + L = laguerreL(1, [pi 0], [x y]); + expected = [laguerreL(1, pi, x) laguerreL(1, 0, y)]; + assert (isequal (L, expected)) ***** test - % matrices - D = [0 1; 2 3]; - A = sym(D); - DZ = D - D; - assert (isequal ( A - D , DZ )) - assert (isequal ( A - A , DZ )) - assert (isequal ( D - A , DZ )) - assert (isequal ( A - 2 , D - 2 )) - assert (isequal ( 4 - A , 4 - D )) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@sym/isequal.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/isequal.m + L = laguerreL([1 n], pi, x); + expected = [laguerreL(1, pi, x) laguerreL(n, pi, x)]; + assert (isequal (L, expected)) ***** test - a = sym([1 2]); - b = a; - assert (isequal (a, b)) - b(1) = 42; - assert (~isequal (a, b)) + L = laguerreL(1, [pi 0], x); + expected = [laguerreL(1, pi, x) laguerreL(1, 0, x)]; + assert (isequal (L, expected)) ***** test - a = sym([1 2; 3 4]); - b = a; - assert (isequal (a, b)) - b(1) = 42; - assert (~isequal (a, b)) + L = laguerreL(1, pi, [x y]); + expected = [laguerreL(1, pi, x) laguerreL(1, pi, y)]; + assert (isequal (L, expected)) ***** test - a = sym([nan; 2]); - b = a; - assert (~isequal (a, b)) + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + f = laguerreL (n, x); + h = function_handle (f); + A = h (1, 3.2); + B = laguerreL (1, 3.2); + assert (A, B) + A = h ([1 2], [3.3 4.4]); + B = laguerreL ([1 2], [3.3 4.4]); + assert (A, B) + end +***** error + % round trip + f = laguerreL (n, y, x); + h = function_handle (f); +19 tests, 19 passed, 0 known failure, 0 skipped +[inst/@sym/exp.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/exp.m +***** error exp (sym(1), 2) +***** assert (isequaln (exp (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - % proper nan treatment - a = sym([nan 2; 3 4]); - b = a; - assert (~isequal (a, b)) + f1 = exp(x); + f2 = exp(d); + assert( abs(double(f1) - f2) < 1e-15 ) ***** test - % more than two arrays - a = sym([1 2 3]); - b = a; - c = a; - assert (isequal (a, b, c)) - c(1) = 42; - assert (~isequal (a, b, c)) + D = [d d; d d]; + A = [x x; x x]; + f1 = exp(A); + f2 = exp(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = exp (d); + f = exp (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/ceil.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ceil.m -***** error ceil (sym(1), 2) -***** assert (isequaln (ceil (sym(nan)), sym(nan))) +[inst/@sym/acsc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acsc.m +***** error acsc (sym(1), 2) +***** assert (isequaln (acsc (sym(nan)), sym(nan))) ***** shared x, d - d = 3/2; - x = sym('3/2'); + d = 1; + x = sym('1'); ***** test - f1 = ceil(x); - f2 = ceil(d); + f1 = acsc(x); + f2 = acsc(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = ceil(A); - f2 = ceil(D); + f1 = acsc(A); + f2 = acsc(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = ceil (d); - f = ceil (y); + A = acsc (d); + f = acsc (y); h = function_handle (f); B = h (d); assert (A, B, -eps) + end 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/pochhammer.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/pochhammer.m -***** error pochhammer (sym(1)) -***** error pochhammer (sym(1), 2, 3) -***** assert (isequal (pochhammer (sym(3), 4), sym(360))) -***** assert (isequal (pochhammer (sym([2 3]), 3), sym([24 60]))) +[inst/@sym/orth.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/orth.m +***** test + A = [1 2; 3 6]; + K = orth(A); + L = orth(sym(A)); + assert (isequal (size(L), [2 1])) + dif1 = abs (double(L) - K); + dif2 = abs (double(L) + K); + assert (all (dif1 < 1e-15) || all (dif2 < 1e-15)) +***** test + A = [1; 3]; + K = orth(A); + L = orth(sym(A)); + assert (isequal (size(L), [2 1])) + dif1 = abs (double(L) - K); + dif2 = abs (double(L) + K); + assert (all (dif1 < 1e-16) || all (dif2 < 1e-16)) +***** test + A = sym([1 2; 3 4]); + L = orth(sym(A)); + assert (isequal (size(L), [2 2])) + v = L(:, 1); + w = L(:, 2); + assert (isAlways (v' * v == 1)) + assert (isAlways (w' * w == 1)) + assert (isAlways (v' * w == 0)) +***** test + A = sym([1 1; 1 0; 1 0]); + L = orth(sym(A)); + assert (isequal (size(L), [3 2])) + v = L(:, 1); + w = L(:, 2); + assert (isAlways (v' * v == 1)) + assert (isAlways (w' * w == 1)) + assert (isAlways (v' * w == 0)) + % y and z components must be equal + assert (isAlways (v(2) == v(3))) + assert (isAlways (w(2) == w(3))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/nchoosek.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/nchoosek.m +***** assert (isequal (nchoosek(sym(5), sym(2)), sym(10))) +***** assert (isequal (nchoosek(sym(5), 2), sym(10))) +***** assert (isequal (nchoosek(5, sym(2)), sym(10))) +***** assert (isequal (nchoosek(sym(10), 0), 1)) +***** assert (isequal (nchoosek(sym(10), -1), 0)) +***** test + n = sym('n', 'nonnegative', 'integer'); + assert (isequal (nchoosek (n, n), sym(1))) +***** test + n = sym('n', 'integer'); + q = nchoosek(n, 2); + w = subs(q, n, 5); + assert (isequal (w, 10)) +***** test + n = sym('n', 'integer'); + k = sym('k', 'integer'); + q = nchoosek(n, k); + w = subs(q, {n k}, {5 2}); + assert (isequal (w, 10)) +***** test + % negative input + assert (isequal (nchoosek (sym(-2), sym(5)), sym(-6))) +***** test + % complex input + n = sym(1 + 3i); + k = sym(5); + A = nchoosek (n, k); + B = gamma (n + 1) / (gamma (k + 1) * gamma (n - k + 1)); + assert (double (A), double (B), -2*eps) +***** test + % complex input + n = sym(-2 + 3i); + k = sym(1 + i); + A = nchoosek (n, k); + B = gamma (n + 1) / (gamma (k + 1) * gamma (n - k + 1)); + assert (double (A), double (B), -2*eps) +11 tests, 11 passed, 0 known failure, 0 skipped +[inst/@sym/degree.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/degree.m +***** error degree (sym(1), 2, 3) +***** test + syms x + assert (isequal (degree(x^3), 3)) + assert (isequal (degree(x^3 + 6), 3)) +***** test + % specify variable + syms x y + p = x^2 + y*x + 1; + assert (isequal (degree(p), 2)) + assert (isequal (degree(p, x), 2)) + assert (isequal (degree(p, y), 1)) +***** test + syms x a oo + assert (isequal (degree(x^3, a), 0)) + assert (isequal (degree(sym(1), a), 0)) + assert (isequal (degree(sym(0), a), -oo)) +***** xtest + % constant inputs + syms oo + assert (isequal (degree(sym(1)), 0)) + assert (isequal (degree(sym(0)), -oo)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/abs.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/abs.m +***** error abs (sym(1), 2) +***** assert (isequaln (abs (sym(nan)), sym(nan))) +***** shared x, d + d = -1; + x = sym('-1'); +***** test + f1 = abs(x); + f2 = abs(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = abs(A); + f2 = abs(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip - if (python_cmd ('return Version(spver) > Version("1.2")')) - syms n z - f = pochhammer (z, n); - h = function_handle (f, 'vars', [z n]); - A = h (1.1, 2.2); - B = pochhammer (1.1, 2.2); - assert (A, B) - end + y = sym('y'); + A = abs (d); + f = abs (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/all.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/all.m +***** test + % matrix + a = [0 3; 1 2]; + s = sym (a); + assert (isequal (all (s), all (a))) + assert (isequal (all (s,1), all (a,1))) + assert (isequal (all (s,2), all (a,2))) +***** test + % vector + a = [1 2 3]; + s = sym (a); + assert (isequal (all (s), all (a))) + assert (isequal (all (s,1), all (a,1))) + assert (isequal (all (s,2), all (a,2))) +***** test + % should fail on symbols + syms x + s = [1 2 x]; + try + all (s) + waserr = false; + catch + waserr = true; + end + assert (waserr) +3 tests, 3 passed, 0 known failure, 0 skipped [inst/@sym/subsref.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/subsref.m ***** shared a,b @@ -12995,32 +11676,1096 @@ assert (isequal (ar(false (6, 1)), r(false (6, 1)))) assert (isequal (ac(false (6, 1)), c(false (6, 1)))) 49 tests, 49 passed, 0 known failure, 0 skipped -[inst/@sym/sign.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/sign.m -***** error sign (sym(1), 2) -***** assert (isequaln (sign (sym(nan)), sym(nan))) +[inst/@sym/mrdivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/mrdivide.m +***** test + % scalar + syms x + assert (isa( x/x, 'sym')) + assert (isequal( x/x, sym(1))) + assert (isa( 2/x, 'sym')) + assert (isa( x/2, 'sym')) +***** test + % matrix / scalar + D = 2*[0 1; 2 3]; + A = sym(D); + assert (isequal ( A/2 , D/2 )) + assert (isequal ( A/sym(2) , D/2 )) +***** test + % I/A: either invert A or leave unevaluated: not bothered which + A = sym([1 2; 3 4]); + B = sym(eye(2)) / A; + assert (isequal (B, inv(A)) || strncmpi (sympy (B), 'MatPow', 6)) +***** xtest + % immutable test, upstream: TODO + A = sym([1 2; 3 4]); + B = sym('ImmutableDenseMatrix([[Integer(1), Integer(2)], [Integer(3), Integer(4)]])'); + assert (isequal (A/A, B/B)) +!!!!! known failure +Python exception: NotImplementedError + occurred at line 1 of the Python code block: + return _ins[0]/_ins[1], +***** test + % A = C/B is C = A*B + A = sym([1 2; 3 4]); + B = sym([1 3; 4 8]); + C = A*B; + A2 = C / B; + assert (isequal (A, A2)) +***** test + A = [1 2; 3 4]; + B = A / A; + % assert (isequal (B, sym(eye(2)) + assert (isequal (B(1,1), 1)) + assert (isequal (B(2,2), 1)) + assert (isequal (B(2,1), 0)) + assert (isequal (B(1,2), 0)) +***** test + A = sym([5 6]); + B = sym([1 2; 3 4]); + C = A*B; + A2 = C / B; + assert (isequal (A, A2)) +7 tests, 6 passed, 1 known failure, 0 skipped +[inst/@sym/potential.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/potential.m +***** error potential (sym(1), 2, 3, 4) +***** shared x,y,z + syms x y z +***** test + % 1D + f = 3*x^2; + F = x^3; + assert (isequal (potential(f), F)) + assert (isequal (potential(f, x), F)) + assert (isequal (potential(f, x, 0), F)) + assert (isequal (potential(f, x, 2), F - 8)) +***** test + F = x*exp(y) + (z-1)^2; + f = gradient(F); + G = potential(f, [x;y;z], [0;1;1]); + assert (isAlways (G == F)) +***** test + F = x*exp(y); + f = gradient(F); + G = potential(f); + assert (isAlways (G == F)) +***** test + % no potential exists + syms x y + a = [x; x*y^2]; + assert (isnan (potential (a))) +***** shared +***** xtest + % fails b/c of sympy #8458 (piecewise expr that should simplify) + syms x + f = cos(x); + assert (isequal (potential(f, x), sin(x))) +!!!!! known failure +assert (isequal (potential (f, x), sin (x))) failed +6 tests, 5 passed, 1 known failure, 0 skipped +[inst/@sym/sort.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sort.m +***** error sort (sym(1), 2) +***** test + f = [sym(1), sym(0)]; + expected = sym([0, 1]); + assert (isequal (sort(f), expected)) +***** test + f = [sym(1)]; + expected = sym(1); + assert (isequal (sort(f), expected)) +***** test + f = [sym(3), sym(2), sym(6)]; + s = sort(f); + expected_s = sym([2, 3, 6]); + assert (isequal (s, expected_s)) +***** test + f = [sym(pi), sin(sym(2)), sqrt(sym(6))]; + s = sort(f); + expected_s = sym([sin(sym(2)), sqrt(sym(6)), sym(pi)]); + assert (isequal (s, expected_s)) +***** test + f = [sym(1), sym(2); sym(2), sym(pi); sym(pi), sym(1)]; + s = sort(f); + expected_s = ([sym(1), sym(1); sym(2), sym(2); sym(pi), sym(pi)]); + assert (isequal (s, expected_s)) +***** assert (isequal (sort(sym([])), sym([]))) +***** error sort([sym('x') 1]) +***** test + % but with assumptions, symbols can be sorted + p = sym('p', 'positive'); + n = sym('n', 'negative'); + expected_s = [n p]; + s = sort ([p n]); + assert (isequal (s, expected_s)) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/isallconstant.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isallconstant.m +***** assert (isallconstant([sym(1) 2 3])) +***** test + syms x + assert (~isallconstant([sym(1) x 3])) +***** test + syms x + assert (~isallconstant([sym(1) x; sym(2) 3])) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/acsch.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acsch.m +***** error acsch (sym(1), 2) +***** test + if (python_cmd ('return Version(spver) > Version("1.0")')) + assert (isequaln (acsch (sym(nan)), sym(nan))) + end ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = sign(x); - f2 = sign(d); + if (python_cmd ('return Version(spver) > Version("1.0")')) + f1 = acsch(x); + f2 = acsch(d); assert( abs(double(f1) - f2) < 1e-15 ) + end ***** test + if (python_cmd ('return Version(spver) > Version("1.0")')) D = [d d; d d]; A = [x x; x x]; - f1 = sign(A); - f2 = sign(D); + f1 = acsch(A); + f2 = acsch(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) + end ***** test % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = sign (d); - f = sign (y); + A = acsch (d); + f = acsch (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) + end +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/subs.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/subs.m +***** error subs (sym(1), 2, 3, 4) +***** shared x,y,t,f + syms x y t + f = x*y; +***** test + assert( isequal( subs(f, x, y), y^2 )) + assert( isequal( subs(f, y, sin(x)), x*sin(x) )) + assert( isequal( subs(f, x, 16), 16*y )) +***** test + % multiple subs w/ cells + assert( isequal( subs(f, {x}, {t}), y*t )) + assert( isequal( subs(f, {x y}, {t t}), t*t )) + assert( isequal( subs(f, {x y}, {t 16}), 16*t )) + assert( isequal( subs(f, {x y}, {16 t}), 16*t )) + assert( isequal( subs(f, {x y}, {2 16}), 32 )) +***** test + % multiple subs w/ vectors + assert( isequal( subs(f, [x y], [t t]), t*t )) + assert( isequal( subs(f, [x y], [t 16]), 16*t )) + assert( isequal( subs(f, [x y], [2 16]), 32 )) +***** test + % anything you can think of + assert( isequal( subs(f, [x y], {t t}), t*t )) + assert( isequal( subs(f, {x y}, [t t]), t*t )) + assert( isequal( subs(f, {x; y}, [t; t]), t*t )) +***** test + % sub in doubles gives sym (matches SMT 2013b) + % FIXME: but see + % http://www.mathworks.co.uk/help/symbolic/gradient.html + assert( isequal( subs(f, {x y}, {2 pi}), 2*sym(pi) )) + assert( ~isa(subs(f, {x y}, {2 pi}), 'double')) + assert( isa(subs(f, {x y}, {2 pi}), 'sym')) + assert( isa(subs(f, {x y}, {2 sym(pi)}), 'sym')) + assert( isa(subs(f, {x y}, {sym(2) sym(pi)}), 'sym')) +***** shared x,y,t,f,F + syms x y t + f = sin(x)*y; + F = [f; 2*f]; +***** test + % need the simultaneous=True flag in SymPy (matches SMT 2013b) + assert( isequal( subs(f, [x t], [t 6]), y*sin(t) )) + assert( isequal( subs(F, [x t], [t 6]), [y*sin(t); 2*y*sin(t)] )) +***** test + % swap x and y (also needs simultaneous=True + assert( isequal( subs(f, [x y], [y x]), x*sin(y) )) +***** test + % but of course both x and y to t still works + assert( isequal( subs(f, [x y], [t t]), t*sin(t) )) +***** shared +***** test + % Issue #10, subbing matrices in for scalars + syms y + a = sym([1 2; 3 4]); + f = sin(y); + g = subs(f, y, a); + assert (isequal (g, sin(a))) +***** test + % Issue #10, subbing matrices in for scalars + syms y + a = sym([1 2]); + g = subs(sin(y), {y}, {a}); + assert (isequal (g, sin(a))) +***** test + % Issue #10, subbing matrices in for scalars + syms y + a = sym([1; 2]); + g = subs(sin(y), {y}, a); + assert (isequal (g, sin(a))) +***** test + % Issue #10, subbing matrices in for scalars + syms y + a = [10 20 30]; + f = 2*y; + g = subs(f, y, a); + assert (isequal (g, 2*a)) + assert (isa (g, 'sym')) +***** test + % Issue #10, sub matrices in for two scalars + syms x y + a = [10 20 30]; + f = x^2*y; + g = subs(f, {x y}, {a a+1}); + h = a.^2.*(a+1); + assert (isequal (g, h)) +***** test + % Issue #10, sub matrices in for two scalars + syms x y z + a = [10 20 30]; + f = x^2*y; + g = subs(f, {x y}, {a z}); + h = a.^2*z; + assert (isequal (g, h)) + g = subs(f, {x y}, {a 6}); + h = a.^2*6; + assert (isequal (g, h)) +***** error + syms x y + a = [10 20 30]; + f = x^2*y; + g = subs(f, {x y}, {[10 20 30] [10 20]}); +***** test + % two inputs + syms x y + assert (isequal (subs (2*x, 6), sym(12))) + assert (isequal (subs (2*x*y^2, 6), 12*y^2)) + assert (isequal (subs (2*y, 6), sym(12))) + assert (isequal (subs (sym(2), 6), sym(2))) +***** test + % only two inputs, vector + syms x + assert (isequal (subs (2*x, [3 5]), sym([6 10]))) + assert (isequal (subs (sym(2), [3 5]), sym([2 2]))) +18 tests, 18 passed, 0 known failure, 0 skipped +[inst/@sym/log.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/log.m +***** error log (sym(1), 2) +***** assert (isequaln (log (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = log(x); + f2 = log(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = log(A); + f2 = log(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = log (d); + f = log (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/dsolve.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/dsolve.m +***** test + syms y(x) + de = diff(y, 2) - 4*y == 0; + f = dsolve(de); + syms C1 C2 + g1 = C1*exp(-2*x) + C2*exp(2*x); + g2 = C2*exp(-2*x) + C1*exp(2*x); + assert (isequal (rhs(f), g1) || isequal (rhs(f), g2)) +***** test + % Not enough initial conditions + syms y(x) C1 + de = diff(y, 2) + 4*y == 0; + g = 3*cos(2*x) + C1*sin(2*x); + try + f = dsolve(de, y(0) == 3); + waserr = false; + catch + waserr = true; + expectederr = regexp (lasterr (), 'Perhaps.*under-specified'); + end + assert ((waserr && expectederr) || isequal (rhs(f), g)) +***** test + % Solution in implicit form + syms y(x) C1 + sol=dsolve((2*x*y(x)-exp(-2*y(x)))*diff(y(x),x)+y(x)==0); + eq=x*exp(2*y(x))-log(y(x))==C1; + assert (isequal (rhs(sol), rhs(eq)) && isequal (lhs(sol), lhs(eq)) ) +***** test + % Compute solution and classification + syms y(x) C1 + [sol,classy]=dsolve((2*x*y(x)-exp(-2*y(x)))*diff(y(x),x)+y(x)==0); + eq=x*exp(2*y(x))-log(y(x))==C1; + assert (isequal (rhs(sol), rhs(eq)) && isequal (lhs(sol), lhs(eq))) + assert (strcmp (classy, '1st_exact')) +***** test + % initial conditions (first order ode) + syms y(x) + de = diff(y, x) + 4*y == 0; + f = dsolve(de, y(0) == 3); + g = 3*exp(-4*x); + assert (isequal (rhs(f), g)) +***** test + % initial conditions (second order ode) + syms y(x) + de = diff(y, 2) + 4*y == 0; + f = dsolve(de, y(0) == 3, subs(diff(y,x),x,0)==0); + g = 3*cos(2*x); + assert (isequal (rhs(f), g)) +***** test + % Dirichlet boundary conditions (second order ode) + syms y(x) + de = diff(y, 2) + 4*y == 0; + f = dsolve(de, y(0) == 2, y(1) == 0); + g = -2*sin(2*x)/tan(sym('2'))+2*cos(2*x); + assert (isequal (rhs(f), g)) +***** test + % Neumann boundary conditions (second order ode) + syms y(x) + de = diff(y, 2) + 4*y == 0; + f = dsolve(de, subs(diff(y,x),x,0)==1, subs(diff(y,x),x,1)==0); + g = sin(2*x)/2+cos(2*x)/(2*tan(sym('2'))); + assert (isequal (rhs(f), g)) +***** test + % Dirichlet-Neumann boundary conditions (second order ode) + syms y(x) + de = diff(y, 2) + 4*y == 0; + f = dsolve(de, y(0) == 3, subs(diff(y,x),x,1)==0); + g = 3*sin(2*x)*tan(sym('2'))+3*cos(2*x); + assert (isequal (rhs(f), g)) +***** test + % System of ODEs + syms x(t) y(t) C1 C2 + ode1 = diff(x(t),t) == 2*y(t); + ode2 = diff(y(t),t) == 2*x(t); + soln = dsolve([ode1, ode2]); + g1 = [2*C1*exp(-2*t) + 2*C2*exp(2*t), -2*C1*exp(-2*t) + 2*C2*exp(2*t)]; + g2 = [2*C1*exp(2*t) + 2*C2*exp(-2*t), 2*C1*exp(2*t) - 2*C2*exp(-2*t)]; + assert (isequal ([rhs(soln{1}), rhs(soln{2})], g1) || ... + isequal ([rhs(soln{1}), rhs(soln{2})], g2)) +***** test + % System of ODEs (initial-value problem) + syms x(t) y(t) + ode_1=diff(x(t),t) == 2*y(t); + ode_2=diff(y(t),t) == 2*x(t); + sol_ivp=dsolve([ode_1,ode_2],x(0)==1,y(0)==0); + g_ivp=[exp(-2*t)/2+exp(2*t)/2,-exp(-2*t)/2+exp(2*t)/2]; + assert (isequal ([rhs(sol_ivp{1}),rhs(sol_ivp{2})], g_ivp)) +***** test + syms y(x) + de = diff(y, 2) + 4*y == 0; + f = dsolve(de, y(0) == 0, y(sym(pi)/4) == 1); + g = sin(2*x); + assert (isequal (rhs(f), g)) +***** test + % Nonlinear example + syms y(x) C1 + e = diff(y, x) == y^2; + g = -1 / (C1 + x); + soln = dsolve(e); + assert (isequal (rhs(soln), g)) +***** test + % Nonlinear example with initial condition + syms y(x) + e = diff(y, x) == y^2; + g = -1 / (x - 1); + soln = dsolve(e, y(0) == 1); + assert (isequal (rhs(soln), g)) +***** xtest + % forcing, Issue #183 + syms x(t) y(t) + ode1 = diff(x) == x + sin(t) + 2; + ode2 = diff(y) == y - t - 3; + soln = dsolve([ode1 ode2], x(0) == 1, y(0) == 2); + X = rhs(soln{1}); + Y = rhs(soln{2}); + assert (isequal (diff(X) - (X + sin(t) + 2), 0)) + assert (isequal (diff(Y) - (Y - t - 3), 0)) +!!!!! known failure +Python exception: NotImplementedError + occurred at line 6 of the Python code block: + sol = sp.dsolve(ode, ics=ics2) +***** test + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + syms f(x) a b + de = diff(f, x) == 4*f; + s = dsolve(de, f(a) == b); + assert (isequal (subs(rhs(s), x, a), b)) + end +16 tests, 15 passed, 1 known failure, 0 skipped +[inst/@sym/sech.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sech.m +***** error sech (sym(1), 2) +***** assert (isequaln (sech (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = sech(x); + f2 = sech(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = sech(A); + f2 = sech(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + y = sym('y'); + A = sech (d); + f = sech (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) + end +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/lambertw.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/lambertw.m +***** test + % W(x)*exp(W(x)) == x + syms x + T = lambertw(x)*exp(lambertw(x)); + T = double (subs (T, x, 10)); + assert (isequal (T, 10)); +***** test + % k, x not x, k to match SMT + syms x + T = lambertw(2, x)*exp(lambertw(2, x)); + T = double (subs (T, x, 10)); + assert (abs(T - 10) < 1e-15) +***** assert (isequal (lambertw(sym(0)), sym(0))) +***** assert ( isequal (lambertw (-1/exp(sym(1))), -sym(1))) +***** assert ( isequal (lambertw (0, -1/exp(sym(1))), -sym(1))) +***** assert ( isequal (lambertw (-1, -1/exp(sym(1))), -sym(1))) +***** xtest + % W(x)*exp(W(x)) == x; FIXME: a failure in SymPy? + syms x + T = simplify(lambertw(x)*exp(lambertw(x))); + assert (isequal (T, x)) +!!!!! known failure +assert (isequal (T, x)) failed +***** assert (abs (lambertw(pi) - double(lambertw(sym(pi)))) < 5*eps) +***** assert (abs (lambertw(-1, 5) - double(lambertw(-1, sym(5)))) < 5*eps) +***** assert (abs (lambertw(2, 2) - double(lambertw(2, sym(2)))) < 5*eps) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x k + A = lambertw (5); + f = lambertw (x); + h = function_handle (f); + B = h (5); + assert (A, B) + + A = lambertw (3, 5); + f = lambertw (k, x); + h = function_handle (f); + B = h (3, 5); + assert (A, B) + end +11 tests, 10 passed, 1 known failure, 0 skipped +[inst/@sym/heaviside.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/heaviside.m +***** error heaviside (sym(1), 2, 3) +***** assert (isequal (heaviside (sym(1)), sym(1))) +***** assert (isequal (heaviside (-sym(1)), sym(0))) +***** assert (double (heaviside (1)), heaviside (1)) +***** test + D = [1 -1; -10 20]; + A = sym(D); + assert (double (heaviside (A)), heaviside (D)) +***** test + if (python_cmd ('return Version(spver) <= Version("1.0")')) + disp ('skipping test, sympy too old') + else + H0 = sym([1 -2 0; 3 0 pi]); + A = heaviside (sym(0), H0); + assert (isequal (A, H0)) + end +***** test + if (python_cmd ('return Version(spver) > Version("1.0")')) + A = heaviside ([-1 0 1], sym(1)/2); + assert (isequal (A, [0 sym(1)/2 1])) + end +***** test + if (python_cmd ('return Version(spver) > Version("1.0")')) + A = heaviside ([-1 0 1], sym(1)/2); + assert (isequal (A, [0 sym(1)/2 1])) + end +***** assert (isequaln (heaviside (sym(nan)), sym(nan))) +***** test + if (python_cmd ('return Version(spver) > Version("1.0")')) + assert (isequaln (heaviside (sym(nan), sym(nan)), sym(nan))) + assert (isequaln (heaviside (0, sym(nan)), sym(nan))) + assert (isequaln (heaviside (2, sym(nan)), sym(1))) + assert (isequaln (heaviside (-2, sym(nan)), sym(0))) + end +***** test + % round trip + syms x + A = heaviside (1); + f = heaviside (x); + h = function_handle (f); + B = h (1); + assert (A, B, -eps) +***** test + % round trip + if (python_cmd ('return Version(spver) > Version("1.0")')) + syms x h0 + f = heaviside (x, h0); + h = function_handle (f, 'vars', {x h0}); + A = heaviside (1, 1/2); + B = h (1, 1/2); + assert (A, B, -eps) + A = heaviside (0, 1/2); + B = h (0, 1/2); + assert (A, B, -eps) + end +12 tests, 12 passed, 0 known failure, 0 skipped +[inst/@sym/factor.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/factor.m +***** test + % n = 152862; + % [p,m] = factor(n); % only works on Octave, no Matlab as of 2014a + n = 330; % so we use an output without repeated factors + p = factor(n); m = ones(size(p)); + [ps,ms] = factor(sym(n)); + assert (isequal (p, ps)) + assert (isequal (m, ms)) +***** test + n = sym(2)^4*13; + [p,m] = factor(n); + assert (isequal (p, [2 13])) + assert (isequal (m, [4 1])) +***** test syms x + assert( logical (factor(x^2 + 6*x + 5) == (x+5)*(x+1))) +***** test + syms x + f = [ x^4/2 + 5*x^3/12 - x^2/3 x^2 - 1 10]; + g = [ x^2*(2*x - 1)*(3*x + 4)/12 (x+1)*(x-1) 10]; + assert (isequal (factor(f), g)) +***** test + % "fragile form" works + A = factor(sym(124)); + B = strtrim(disp(A, 'flat')); + assert (strcmp (B, '2**2*31**1')) +***** error [p, m] = factor(sym('x')); +***** error [p, m] = factor(sym(42), sym('x')); +***** test + % if polynomial happens to be a constant, don't attempt integer + % factorization if a variable is specified + f = sym(42); + q = factor(f, sym('x')); + assert (isequal (f, q)); +8 tests, 8 passed, 0 known failure, 0 skipped +[inst/@sym/asind.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/asind.m +***** error asind (sym(1), 2) +***** assert (isequaln (asind (sym(nan)), sym(nan))) +***** test + f1 = asind (sym(1)/2); + f2 = asind (1/2); + assert (double (f1), f2, -eps) +***** test + D = [1 2; 3 4]/4; + A = sym([1 2; 3 4])/4; + f1 = asind (A); + f2 = asind (D); + assert (double (f1), f2, -eps) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/gradient.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/gradient.m +***** shared x,y,z + syms x y z +***** test + % 1D + f = x^2; + assert (isequal (gradient(f), diff(f,x))) + assert (isequal (gradient(f,{x}), diff(f,x))) + assert (isequal (gradient(f,[x]), diff(f,x))) + assert (isequal (gradient(f,x), diff(f,x))) +***** test + % const + f = sym(1); + g = sym(0); + assert (isequal (gradient(f), g)) + assert (isequal (gradient(f,x), g)) +***** test + % double const + f = 1; + g = sym(0); + assert (isequal (gradient(f,x), g)) +***** test + % 1D fcn in 2d/3d + f = sin(y); + assert (isequal (gradient(f), diff(f,y))) + assert (isequal (gradient(f, {x,y}), [sym(0); diff(f,y)])) + assert (isequal (gradient(f, [x y]), [sym(0); diff(f,y)])) + assert (isequal (size (gradient(f, {x,y})), [2 1])) + assert (isequal (gradient(f, {x,y,z}), [0; diff(f,y); 0])) + assert (isequal (gradient(f, [x y z]), [0; diff(f,y); 0])) + assert (isequal (size (gradient(f, {x,y,z})), [3 1])) +***** test + % grad is column vector + f = sin(y); + assert (isequal (size (gradient(f, {x,y})), [2 1])) + assert (isequal (size (gradient(f, {x,y,z})), [3 1])) + assert (isequal (size (gradient(f, [x y])), [2 1])) + assert (isequal (size (gradient(f, [x;y])), [2 1])) +***** test + % 2d fcn in 2d/3d + f = sin(exp(x)*y); + g2 = [diff(f,x); diff(f,y)]; + g3 = [diff(f,x); diff(f,y); diff(f,z)]; + assert (isequal (gradient(f), g2)) + assert (isequal (gradient(f, {x,y}), g2)) + assert (isequal (gradient(f, {x,y,z}), g3)) +***** test + % 2d fcn in 2d/3d + f = sin(exp(x)*y+sinh(z)); + g2 = [diff(f,x); diff(f,y)]; + g3 = [diff(f,x); diff(f,y); diff(f,z)]; + assert (isequal (gradient(f), g3)) + assert (isequal (gradient(f, {x,y}), g2)) + assert (isequal (gradient(f, {x,y,z}), g3)) +***** error gradient(sym('x'), 42, 42) +***** error gradient([sym('x') sym('x')]) +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/any.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/any.m +***** test + % matrix + a = [0 0; 1 0]; + s = sym(a); + assert (isequal (any (s), any (a))) + assert (isequal (any (s,1), any (a,1))) + assert (isequal (any (s,2), any (a,2))) +***** test + % vector + a = [0 1 0]; + s = sym(a); + assert (isequal (any (s), any (a))) + assert (isequal (any (s,1), any (a,1))) + assert (isequal (any (s,2), any (a,2))) +***** test + % should fail on symbols + syms x + s = [0 1 x]; + try + any (s) + waserr = false; + catch + waserr = true; + end + assert (waserr) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/disp.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/disp.m +***** test + syms x + s = disp(sin(x)); + assert(strcmp(s, sprintf(' sin(x)\n'))) +***** test + syms x + s = disp(sin(x/2), 'flat'); + assert(strcmp(s, sprintf(' sin(x/2)\n'))) +***** test + % Examples of 2x0 and 0x2 empty matrices: + a = sym([1 2; 3 4]); + b2x0 = a([true true], [false false]); + b0x2 = a([false false], [true true]); + assert (isequal (size (b2x0), [2 0])) + assert (isequal (size (b0x2), [0 2])) + s = disp(b2x0); + assert(strcmp(s, sprintf(' []\n'))) + s = disp(b0x2); + assert(strcmp(s, sprintf(' []\n'))) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/length.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/length.m +***** test + a = sym([1 2 3]); + assert(length(a) == 3); +***** test + % 2D array + a = sym([1 2 3; 4 5 6]); + assert(length(a) == 3); +***** test + % empty + a = sym([]); + assert(length(a) == 0); +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/min.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/min.m +***** test + % scalars with dim + a = min(sym(pi), [], 1); + b = sym(pi); + assert (isequal (a, b)); + a = min(sym(pi), [], 2); + assert (isequal (a, b)); + a = max(sym(pi), [], 1); + assert (isequal (a, b)); + a = max(sym(pi), [], 2); + assert (isequal (a, b)); +***** shared A, D + D = [0 1 2 3]; + A = sym(D); +***** test + % row vectors + assert (isequal (min(A), sym(min(D)))) + assert (isequal (min(A), sym(0))) + assert (isequal (max(A), sym(max(D)))) + assert (isequal (max(A), sym(3))) +***** test + % row vectors with dim + assert (isequal (min(A, [], 1), sym(min(D, [], 1)))) + assert (isequal (min(A, [], 2), sym(min(D, [], 2)))) + assert (isequal (max(A, [], 1), sym(max(D, [], 1)))) + assert (isequal (max(A, [], 2), sym(max(D, [], 2)))) +***** test + % column vectors + A = A.'; + D = D.'; + assert (isequal (min(A), sym(min(D)))) + assert (isequal (min(A), sym(0))) + assert (isequal (max(A), sym(max(D)))) + assert (isequal (max(A), sym(3))) +***** test + % row vectors with dim + assert (isequal (min(A, [], 1), sym(min(D, [], 1)))) + assert (isequal (min(A, [], 2), sym(min(D, [], 2)))) + assert (isequal (max(A, [], 1), sym(max(D, [], 1)))) + assert (isequal (max(A, [], 2), sym(max(D, [], 2)))) +***** shared +***** test + % empty + a = min(sym([])); + assert(isempty(a)) + a = max(sym([])); + assert(isempty(a)) +***** test + % matrix + A = [1 4 6; 2 2 5]; + A = sym(A); + assert (isequal (min(A), sym([1 2 5]))) + assert (isequal (min(A, [], 1), sym([1 2 5]))) + assert (isequal (min(A, [], 2), sym([1; 2]))) + assert (isequal (max(A), sym([2 4 6]))) + assert (isequal (max(A, [], 1), sym([2 4 6]))) + assert (isequal (max(A, [], 2), sym([6; 5]))) +***** test + % index output is double not sym + [m, I] = min(sym(2), [], 1); + assert (strcmp(class(I), 'double')) + [m, I] = max(sym(2), [], 1); + assert (strcmp(class(I), 'double')) +***** test + % empty rows/columns, I is double + A = sym(zeros(0, 4)); + [m, I] = min(A, [], 1); + assert (strcmp(class(I), 'double')) + [m, I] = max(A, [], 1); + assert (strcmp(class(I), 'double')) + A = sym(zeros(3, 0)); + [m, I] = min(A, [], 2); + assert (strcmp(class(I), 'double')) + [m, I] = max(A, [], 2); + assert (strcmp(class(I), 'double')) +***** test + % index output + A = [0 1 9; 10 7 4]; + B = sym(A); + [m1, I1] = min(A); + [m2, I2] = min(B); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) + [m1, I1] = max(A); + [m2, I2] = max(B); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) +***** test + % index output, with dim + A = [0 1 9; 10 7 4]; + B = sym(A); + [m1, I1] = min(A, [], 1); + [m2, I2] = min(B, [], 1); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) + [m1, I1] = min(A, [], 2); + [m2, I2] = min(B, [], 2); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) + [m1, I1] = max(A, [], 1); + [m2, I2] = max(B, [], 1); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) + [m1, I1] = max(A, [], 2); + [m2, I2] = max(B, [], 2); + assert (isequal (I1, I2)) + assert (isequal (m1, double(m2))) +***** test + % empty columns + A = sym(zeros(0, 4)); + [m, I] = min(A, [], 1); + assert (isequal (size(m), [0 4])) + assert (isequal (size(I), [0 4])) + [m, I] = max(A, [], 1); + assert (isequal (size(m), [0 4])) + assert (isequal (size(I), [0 4])) +***** test + % empty rows + A = sym(zeros(3, 0)); + [m, I] = min(A, [], 2); + assert (isequal (size(m), [3 0])) + assert (isequal (size(I), [3 0])) + [m, I] = max(A, [], 2); + assert (isequal (size(m), [3 0])) + assert (isequal (size(I), [3 0])) +***** test + % another empty case + % we differ slightly from double which gives 1x0/0x1 + A = sym(zeros(3, 0)); + [m, I] = min(A, [], 1); + assert (isempty (m)) + assert (isempty (I)) + A = sym(zeros(0, 3)); + [m, I] = min(A, [], 2); + assert (isempty (m)) + assert (isempty (I)) +***** test + % binary op form, one a scalar + A = sym([3 1 9]); + m = min(A, sym(2)); + M = max(A, sym(2)); + assert (isequal (m, sym([2 1 2]))) + assert (isequal (M, sym([3 2 9]))) + m = min(sym(2), A); + M = max(sym(2), A); + assert (isequal (m, sym([2 1 2]))) + assert (isequal (M, sym([3 2 9]))) +***** test + % binary op form, both scalar + m = min(sym(1), sym(2)); + M = max(sym(2), sym(2)); + assert (isequal (m, sym(1))) + assert (isequal (M, sym(2))) +16 tests, 16 passed, 0 known failure, 0 skipped +[inst/@sym/diag.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/diag.m +***** test + % scalar + syms x + assert (isequal (diag(x), x)) +***** test + % row,col vec input + syms x + r = [1 x 2]; + c = [sym(1); x]; + assert (isequal (diag(diag(c)), c)) + assert (isequal (diag(c), [sym(1) 0; 0 x])) + assert (isequal (diag(diag(r)), r.')) + assert (isequal (diag(r), [sym(1) 0 0; 0 x 0; sym(0) 0 2])) +***** test + % create matrix, kth diag + syms x + r = [1 x]; + z = sym(0); + assert (isequal (diag (x, 0), x)) + assert (isequal (diag (x, 1), [z x; z z])) + assert (isequal (diag (x, -1), [z z; x z])) + assert (isequal (diag (x, 2), [z z x; z z z; z z z])) + assert (isequal (diag (r, 1), [z 1 z; z z x; z z z])) +***** test + % extract kth diag + A = sym([1 2 3; 4 5 6]); + assert (isequal (diag(A), sym([1; 5]))) + assert (isequal (diag(A, 0), sym([1; 5]))) + assert (isequal (diag(A, 1), sym([2; 6]))) + assert (isequal (diag(A, 2), sym(3))) + assert (isequal (diag(A, -1), sym(4))) + assert (isempty (diag(A, -2))) + assert (isempty (diag(A, 3))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/log2.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/log2.m +***** assert (isequal (log2 (sym (1024)), sym (10))) +***** assert (isequal (log2 (sym ([2 16; 32 1])), sym ([1 4; 5 0]))) +***** test + % round-trip + syms x + f = log2 (x); + h = function_handle (f); + A = h (1.1); + B = log2 (1.1); + assert (A, B, -5*eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticCK.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticCK.m +***** error ellipticCK (sym (1), 2) +***** assert (double (ellipticCK (sym (1)/2)), 1.8541, 10e-5) +***** assert (double (ellipticCK (sym (101)/10)), 0.812691836806976, -3*eps) +***** assert (isequal (ellipticCK (sym (1)), sym(pi)/2)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@sym/besselj.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/besselj.m +***** test + X = [1 2 3; 4 5 6]; + ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; + n = double(ns); + A = double(besselj(ns, X)); + B = besselj(n, X); + assert (all (all (abs (A - B) < 50*eps*abs(A)))) +***** test + % roundtrip + syms x + A = besselj(2, 10); + q = besselj(2, x); + h = function_handle(q); + B = h(10); + assert (abs (A - B) <= eps*abs(A)) +***** error besselj(sym('x')) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@sym/dirac.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/dirac.m +***** error dirac (sym(1), 2) +***** assert (isequaln (dirac (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = dirac(x); + f2 = dirac(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = dirac(A); + f2 = dirac(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = dirac (d); + f = dirac (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/ge.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ge.m +***** test + % simple + x = sym(1); y = sym(1); e = x >= y; + assert (logical (e)) + x = sym(1); y = sym(2); e = x >= y; + assert (~logical(e)) +***** test + % array -- array + syms x + a = sym([1 3 3 2*x]); + b = sym([2 x 3 10]); + e = a >= b; + assert (isa (e, 'sym')) + assert (~logical (e(1))) + assert (isa (e(2), 'sym')) + assert (isequal (e(2), 3 >= x)) + assert (logical (e(3))) + assert (isa (e(4), 'sym')) + assert (isequal (e(4), 2*x >= 10)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/csc.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/csc.m +***** error csc (sym(1), 2) +***** assert (isequaln (csc (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = csc(x); + f2 = csc(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = csc(A); + f2 = csc(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = csc (d); + f = csc (y); h = function_handle (f); B = h (d); assert (A, B, -eps) 5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/invhilb.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/invhilb.m +***** test + A = invhilb(sym(3)); + B = sym([9 -36 30;-36 192 -180;30 -180 180]); + assert( isequal( A, B)) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/angle.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/angle.m +***** test + Z = [sqrt(sym(3)) + 3*sym(i), 3 + sqrt(sym(3))*sym(i); 1 + sym(i), sym(i)]; + Q = [sym(pi)/3 sym(pi)/6; sym(pi)/4 sym(pi)/2]; + assert( isequal( angle(Z), Q)); +***** test + % roundtrip + if (python_cmd ('return Version(spver) > Version("1.1.1")')) + syms x + A = angle (2+2i); + f = angle (x); + h = function_handle (f); + B = h (2+2i); + assert (A, B, -eps) + end +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/ellipticF.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticF.m +***** error ellipticF (sym(1)) +***** error ellipticF (sym(1), 2, 3) +***** assert (double (ellipticF (sym (pi)/3, sym (-105)/10)), 0.6184459461, 10e-11) +***** assert (double (ellipticF (sym (pi)/4, sym (-pi))), 0.6485970495, 10e-11) +***** assert (double (ellipticF (sym (1), sym (-1))), 0.8963937895, 10e-11) +***** assert (double (ellipticF (sym (pi)/6, sym (0))), 0.5235987756, 10e-11) +***** test + % compare to Maple + us = vpa (ellipticF (sym(11)/10, sym(9)/4), 40); + % > evalf(EllipticF(sin(11/10), sqrt(9/4)), 40); + maple = vpa ('1.206444996991058996424988192917728014427', 40) - ... + vpa ('0.8157358125823472313001683083685348517476j', 40); + assert (abs (double (maple - us)), 0, 1e-39) +7 tests, 7 passed, 0 known failure, 0 skipped [inst/@sym/fourier.m] >>>>> /build/octave-symbolic-2.7.1/inst/@sym/fourier.m ***** test @@ -13056,194 +12801,339 @@ !!!!! known failure assert (logical (fourier (diff (f (x), x), x, w) == -1i * w * fourier (f (x), x, w))) failed 5 tests, 4 passed, 1 known failure, 0 skipped -[inst/@sym/ellipticE.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/ellipticE.m -***** error ellipticE (sym(1), 2, 3) -***** assert (double (ellipticE (sym (-105)/10)), 3.70961391, 10e-9) -***** assert (double (ellipticE (sym (-pi)/4)), 1.844349247, 10e-10) -***** assert (double (ellipticE (sym (0))), 1.570796327, 10e-10) -***** assert (double (ellipticE (sym (1))), 1, 10e-1) +[inst/@sym/double.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/double.m ***** test - % compare to Maple - us = vpa (ellipticE (sym(7)/6, sym(13)/7), 40); - % > evalf(EllipticE(sin(7/6), sqrt(13/7)), 40); - maple = vpa ('0.6263078268598504591831743625971763209496', 40) + ... - vpa ('0.1775496232203171126975790989055865596501j', 40); - assert (abs (double (maple - us)), 0, 2e-39) + % numeric scalar + a = double(sym(10)); + assert (a == 10) + assert (isa (a, 'double')) ***** test - % compare to Maple - us = vpa (ellipticE (sym(8)/7), 40); - % > evalf(EllipticE(sqrt(8/7)), 40); - maple = vpa ('0.8717182992576322508542205614105802333270', 40) + ... - vpa ('0.1066754320328976949531350910798010526685j', 40); - assert (abs (double (maple - us)), 0, 2e-39) -7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@sym/charpoly.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/charpoly.m -***** error charpoly (sym (1), 1, 2) -***** error charpoly (sym ([1 2])) + % numeric vectors + a = double(sym([10 12])); + assert (isequal (a, [10 12])) + assert (isa (a, 'double')) ***** test - syms x - A = sym([1 2; 3 4]); - assert (isequal (charpoly(A, x), x^2 - 5*x -2)) + % complex + a = 3 + 4i; + b = sym(a); + assert (isequal (double (b), a)) +***** xtest + % unexpected, precisely same floating point + a = 3 + 4i; + b = sym(a); + assert (isequal (double (b/pi), a/pi)) ***** test - syms x - A = sym([1 2; 3 4]); - B = sym([1 -5 -2]); - assert (isequal (charpoly(A), B)) + % floating point + x = sqrt(sym(2)); + assert( abs(double(x) - sqrt(2)) < 2*eps) + x = sym(pi); + assert( abs(double(x) - pi) < 2*eps) ***** test - syms x - A = sym([x x; x x]); - B = sym([1 -2*x 0]); - assert (isequal (charpoly(A), B)) -5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/log2.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/log2.m -***** assert (isequal (log2 (sym (1024)), sym (10))) -***** assert (isequal (log2 (sym ([2 16; 32 1])), sym ([1 4; 5 0]))) + oo = sym(inf); + assert( double(oo) == inf ) + assert( double(-oo) == -inf ) + assert( isnan(double(0*oo)) ) ***** test - % round-trip + zoo = sym('zoo'); + assert (double(zoo) == complex(inf, inf)) +***** test + zoo = sym('zoo'); + assert (double(-zoo) == double(zoo) ) + assert( isnan(double(0*zoo)) ) +***** test + % nan + snan = sym(nan); + assert( isnan(double(snan))) +***** test + % don't want NaN+NaNi + snan = sym(nan); + assert (isreal (double (snan))) +***** test + % arrays + a = [1 2; 3 4]; + assert( isequal( double(sym(a)), a )) + assert( isequal( double(sym(a)), a )) + % should fail with error for non-double +***** error syms x; double(x) +***** error syms x; double([1 2 x]) +13 tests, 13 passed, 0 known failure, 0 skipped +[inst/@sym/bessely.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/bessely.m +***** test + X = [1 2 3; 4 5 6]; + ns = [sym(0) 1 -2; sym(1)/2 -sym(3)/2 pi]; + n = double(ns); + A = double(bessely(ns, X)); + B = bessely(n, X); + assert (all (all (abs (A - B) < 50*eps*abs(A)))) +***** test + % roundtrip syms x - f = log2 (x); - h = function_handle (f); - A = h (1.1); - B = log2 (1.1); - assert (A, B, -5*eps) + A = bessely(2, 10); + q = bessely(2, x); + h = function_handle(q); + B = h(10); + assert (abs (A - B) <= eps*abs(A)) +***** error bessely(sym('x')) 3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/csch.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/csch.m -***** error csch (sym(1), 2) -***** assert (isequaln (csch (sym(nan)), sym(nan))) +[inst/@sym/ssinint.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/ssinint.m +***** assert (isequal (ssinint(sym(0)), -sym(pi)/2)) +***** test + A = ssinint (sym ([0 1])); + B = [-pi/2 -0.62471325642771360426]; + assert( all(all( abs(double(A)-B) < 1e-15 ))) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@sym/acot.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/acot.m +***** error acot (sym(1), 2) +***** assert (isequaln (acot (sym(nan)), sym(nan))) ***** shared x, d d = 1; x = sym('1'); ***** test - f1 = csch(x); - f2 = csch(d); + f1 = acot(x); + f2 = acot(d); assert( abs(double(f1) - f2) < 1e-15 ) ***** test D = [d d; d d]; A = [x x; x x]; - f1 = csch(A); - f2 = csch(D); + f1 = acot(A); + f2 = acot(D); assert( all(all( abs(double(f1) - f2) < 1e-15 ))) ***** test % round trip - if (python_cmd ('return Version(spver) > Version("1.0")')) y = sym('y'); - A = csch (d); - f = csch (y); + A = acot (d); + f = acot (y); h = function_handle (f); B = h (d); assert (A, B, -eps) - end 5 tests, 5 passed, 0 known failure, 0 skipped -[inst/@sym/chol.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/chol.m -***** error chol (sym ([1 2; 3 4])); -***** error chol (sym ([1 2; 3 4; 5 6])); +[inst/@sym/isequaln.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/isequaln.m ***** test - A = chol(hilb(sym(2))); - B = [[1 0]; sym(1)/2 sqrt(sym(3))/6]; - assert( isequal( A, B )) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@sym/asind.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@sym/asind.m -***** error asind (sym(1), 2) -***** assert (isequaln (asind (sym(nan)), sym(nan))) + a = sym([1 2]); + b = a; + assert (isequaln (a, b)) + b(1) = 42; + assert (~isequaln (a, b)) ***** test - f1 = asind (sym(1)/2); - f2 = asind (1/2); - assert (double (f1), f2, -eps) + a = sym([1 2; 3 4]); + b = a; + assert (isequaln (a, b)) + b(1) = 42; + assert (~isequaln (a, b)) ***** test - D = [1 2; 3 4]/4; - A = sym([1 2; 3 4])/4; - f1 = asind (A); - f2 = asind (D); - assert (double (f1), f2, -eps) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/findsymbols.m] ->>>>> /build/octave-symbolic-2.7.1/inst/findsymbols.m + a = sym([nan; 2]); + b = a; + assert (isequaln (a, b)) ***** test - syms x b y n a arlo - z = a*x + b*pi*sin (n) + exp (y) + exp (sym (1)) + arlo; - s = findsymbols (z); - assert (isequal ([s{:}], [a,arlo,b,n,x,y])) + a = sym([nan 2; 3 4]); + b = a; + assert (isequaln (a, b)) +***** test + % more than two arrays + a = sym([nan 2 3]); + b = a; + c = a; + assert (isequaln (a, b, c)) + c(1) = 42; + assert (~isequaln (a, b, c)) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/atan.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/atan.m +***** error atan (sym(1), 2) +***** assert (isequaln (atan (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); +***** test + f1 = atan(x); + f2 = atan(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = atan(A); + f2 = atan(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = atan (d); + f = atan (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/hilb.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/hilb.m +***** test + A = hilb (sym(3)); + B = [sym(1) sym(1)/2 sym(1)/3; sym(1)/2 sym(1)/3 sym(1)/4; sym(1)/3 sym(1)/4 sym(1)/5]; + assert (isequal (A, B)) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/igamma.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/igamma.m ***** test + % mostly tested in @sym/gammainc syms x - s = findsymbols (x); - assert (isequal (s{1}, x)) + assert (isequal (igamma (2, x), gammainc(x, 2, 'upper'))) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@sym/airy.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/airy.m ***** test - syms z x y a - s = findsymbols ([x y; 1 a]); - assert (isequal ([s{:}], [a x y])) -***** assert (isempty (findsymbols (sym (1)))) -***** assert (isempty (findsymbols (sym ([1 2])))) -***** assert (isempty (findsymbols (sym (nan)))) -***** assert (isempty (findsymbols (sym (inf)))) -***** assert (isempty (findsymbols (exp (sym (2))))) + syms z + a = airy(0, z); + ap = airy(1, z); + assert (isequal (diff (a), ap)) + assert (isequal (diff (ap), z*a)) ***** test - % empty sym for findsymbols, findsym, and symvar - assert (isempty (findsymbols (sym([])))) - assert (isempty (findsym (sym([])))) - assert (isempty (symvar (sym([])))) + syms z + b = airy(2, z); + bp = airy(3, z); + assert (isequal (diff (b), bp)) + assert (isequal (diff (bp), z*b)) ***** test - % diff. assumptions make diff. symbols - x1 = sym('x'); - x2 = sym('x', 'positive'); - f = x1*x2; - assert (length (findsymbols (f)) == 2) + % default to k=0 + syms z + a = airy(0, z); + a2 = airy(z); + assert (isequal (a, a2)) +***** error airy(0, sym('x'), 2) +***** error airy(4, sym('z')) +***** error airy(-1, sym('z')) ***** test - % symfun or sym - syms x f(y) - a = f*x; - b = f(y)*x; - assert (isequal (findsymbols(a), {x y})) - assert (isequal (findsymbols(b), {x y})) + % symbolic k + syms z + b1 = airy(2, z); + b2 = airy(sym(2), z); + assert (isequal (b1, b2)) ***** test - % findsymbols on symfun does not find the argnames (unless they - % are on the RHS of course, this matches SMT 2014a). - syms a x y - f(x, y) = a; % const symfun - assert (isequal (findsymbols(f), {a})) - syms a x y - f(x, y) = a*y; - assert (isequal (findsymbols(f), {a y})) + % doubles, relative error + X = [1 2 pi; 4i 5 6+6i]; + Xs = sym(X); + for k = 0:3 + A = double(airy(k, Xs)); + B = airy(k, X); + assert (all (all (abs(A - B) < 500*eps*abs(A)))) + end ***** test - % sorts lexigraphically, same as symvar *with single input* - % (note symvar does something different with 2 inputs). - syms A B a b x y X Y - f = A*a*B*b*y*X*Y*x; - assert (isequal (findsymbols(f), {A B X Y a b x y})) - assert (isequal (symvar(f), [A B X Y a b x y])) + % round-trip + syms x + for k = 0:3 + A = airy(k, 10); + q = airy(k, x); + h = function_handle(q); + B = h(10); + assert (abs(A-B) < 500*eps*abs(A)) + end +9 tests, 9 passed, 0 known failure, 0 skipped +[inst/@sym/sqrt.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/sqrt.m +***** error sqrt (sym(1), 2) +***** assert (isequaln (sqrt (sym(nan)), sym(nan))) +***** shared x, d + d = 1; + x = sym('1'); ***** test - % symbols in matpow - syms x y - syms n - A = [sin(x) 2; y 1]; - B = A^n; - L = findsymbols(B); - assert (isequal (L, {n x y})) -14 tests, 14 passed, 0 known failure, 0 skipped -[inst/@symfun/mrdivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mrdivide.m + f1 = sqrt(x); + f2 = sqrt(d); + assert( abs(double(f1) - f2) < 1e-15 ) +***** test + D = [d d; d d]; + A = [x x; x x]; + f1 = sqrt(A); + f2 = sqrt(D); + assert( all(all( abs(double(f1) - f2) < 1e-15 ))) +***** test + % round trip + y = sym('y'); + A = sqrt (d); + f = sqrt (y); + h = function_handle (f); + B = h (d); + assert (A, B, -eps) +5 tests, 5 passed, 0 known failure, 0 skipped +[inst/@sym/log10.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@sym/log10.m +***** assert (isequal (log10 (sym (1000)), sym (3))) +***** assert (isequal (log10 (sym ([10 100])), sym ([1 2]))) ***** test + % round-trip syms x - f(x) = x^2; - assert( isa(f/f, 'symfun')) - assert( isa(f/x, 'symfun')) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@symfun/uminus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/uminus.m + f = log10 (x); + h = function_handle (f); + A = h (1.1); + B = log10 (1.1); + assert (A, B, -eps) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/eulergamma.m] +>>>>> /build/octave-symbolic-2.7.1/inst/eulergamma.m +***** error catalan (sym(1)) +***** assert (double (eulergamma ()) > 0.577215664901) +***** assert (double (eulergamma ()) < 0.577215664902) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/poly2sym.m] +>>>>> /build/octave-symbolic-2.7.1/inst/poly2sym.m +***** shared x,y,a,b,c,p + syms x y a b c + p = x^3 + 2*x^2 + 3*x + 4; +***** assert(isAlways( poly2sym([1 2 3 4]) == p )) +***** assert(isAlways( poly2sym([1 2 3 4],x) == p )) +***** assert(isAlways( poly2sym([1 2 3 4],y) == subs(p,x,y) )) +***** assert(isAlways( poly2sym([1 2 3 4],5) == subs(p,x,5) )) +***** assert(isequal( poly2sym ([1]), 1 )) +***** assert(isequal( poly2sym ([]), 0 )) +***** assert(isAlways( poly2sym(sym([1 2 3 4]),x) == p )) +***** assert(isAlways( poly2sym([a b c],x) == a*x^2 + b*x + c )) +***** assert(isAlways( poly2sym([a b c]) == a*x^2 + b*x + c )) +***** assert(isequal( poly2sym(sym([])), 0 )) +***** assert(isAlways( poly2sym({sym(1) sym(2)}, x) == x + 2 )) +***** assert(isequal( poly2sym ({1}), 1 )) +***** assert(isequal( poly2sym ({}), 0 )) +***** assert(isequal( poly2sym ({1}, x), 1 )) +***** assert(isequal( poly2sym ({}, x), 0 )) +***** assert(isAlways( poly2sym([x x], x) == x^2 + x )) +***** test + % mixed cell array with doubles and syms + assert (isequal (poly2sym ({2.0 sym(3) int64(4)}), 2*x^2 + 3*x + 4)) +***** test + % string for x + p = poly2sym ([1 2], 's'); + syms s + assert (isequal (p, s + 2)) +18 tests, 18 passed, 0 known failure, 0 skipped +[inst/@symfun/diff.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/diff.m +***** test + % concrete fcn + syms x + f(x) = x*x; + g(x) = 2*x; + assert (logical (diff(f) == g)) + assert (isa (diff(f), 'symfun')) +***** test + % abstract fcn + syms y(x) + assert (logical (diff(y) == diff(y(x)))) + assert (isa (diff(y), 'symfun')) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/rdivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/rdivide.m ***** test - % Issue #447 syms x f(x) = x^2; - assert (isa (-f, 'symfun')) + assert( isa(f./f, 'symfun')) + assert( isa(f./[x x^2], 'symfun')) ***** test - syms f(x) - h = -f; - assert (isa (h, 'symfun')) + syms x + f(x) = [x 2*x]; + h = f./[x 2]; + assert( isa(h, 'symfun')) + assert( isequal (h.sym, [1 x])) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/@symfun/symvar.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/symvar.m @@ -13305,17 +13195,93 @@ assert( isa(f\f, 'symfun')) assert( isa(f\x, 'symfun')) 1 test, 1 passed, 0 known failure, 0 skipped -[inst/@symfun/numel.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/numel.m +[inst/@symfun/formula.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/formula.m +***** test + % simple + syms x + f(x) = sin(x); + g = formula(f); + assert (isequal (g, sin(x))); +***** test + % concrete: return is a sym, not a symfun + syms x + f(x) = sin(x); + g = formula(f); + assert (~isa(g, 'symfun')); +***** test + % abstract: return is a sym, not a symfun + syms f(x) + g = formula(f); + assert (~isa(g, 'symfun')); +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@symfun/ldivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/ldivide.m ***** test syms x f(x) = x^2; - assert(numel(f)==1) + assert( isa(f .\ f, 'symfun')) + assert( isa(f .\ x, 'symfun')) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@symfun/argnames.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/argnames.m +***** test + % basic test + syms f(x) + assert (isequal (argnames (f), x)) +***** test + % Multiple variables, abstract symfun + syms f(t, x, y) + assert (isequal (argnames (f), [t x y])) +***** test + % Concrete symfun + syms x y z t + f(t, x, y) = x + y + z; + assert (isequal (argnames (f), [t x y])) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@symfun/isequal.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/isequal.m +***** error isequal (symfun('x + 1', x)) +***** test + syms x y + f(x) = 2*x; + g(x) = 2*x; + assert (isequal (f, g)) ***** test syms x - f(x) = [1 x]; - assert(numel(f)==1) -2 tests, 2 passed, 0 known failure, 0 skipped + f(x) = 2*x + 1; + g(x) = 2*x + 1; + h(x) = 2*x + 1; + assert (isequal (f, g, h)) +***** test + syms x + f(x) = 2*x + 1; + g(x) = 2*x + 1; + h(x) = 2*x; + assert (~ isequal (f, g, h)) +***** test + syms x y + f(x) = 2*x; + g(x, y) = 2*x; + assert (~ isequal (f, g)) +***** test + syms x y + f(x) = symfun(nan, x); + g(x) = symfun(nan, x); + assert (~ isequal (f, g)) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/@symfun/mpower.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mpower.m +***** test + syms x + f(x) = 2*x; + h = f^f; + assert( isa(h, 'symfun')) + assert( isequal(h.sym, (2*x)^(2*x))) + h = f^sym(2); + assert( isa(h, 'symfun')) + assert( isequal(h.sym, 4*x^2)) +1 test, 1 passed, 0 known failure, 0 skipped [inst/@symfun/int.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/int.m ***** test @@ -13369,22 +13335,6 @@ assert (isequal (argnames (g), x)) assert (isequal (formula(g), x^2*y)) 7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@symfun/argnames.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/argnames.m -***** test - % basic test - syms f(x) - assert (isequal (argnames (f), x)) -***** test - % Multiple variables, abstract symfun - syms f(t, x, y) - assert (isequal (argnames (f), [t x y])) -***** test - % Concrete symfun - syms x y z t - f(t, x, y) = x + y + z; - assert (isequal (argnames (f), [t x y])) -3 tests, 3 passed, 0 known failure, 0 skipped [inst/@symfun/plus.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/plus.m ***** test @@ -13393,19 +13343,105 @@ assert( isa(f + f, 'symfun')) assert( isa(f + x, 'symfun')) 1 test, 1 passed, 0 known failure, 0 skipped -[inst/@symfun/rdivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/rdivide.m +[inst/@symfun/times.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/times.m ***** test syms x f(x) = x^2; - assert( isa(f./f, 'symfun')) - assert( isa(f./[x x^2], 'symfun')) + assert( isa(f .* f, 'symfun')) + assert( isa(f .* x, 'symfun')) ***** test syms x f(x) = [x 2*x]; - h = f./[x 2]; + h = f.*[x 3]; assert( isa(h, 'symfun')) - assert( isequal (h.sym, [1 x])) + assert( isequal (h.sym, [x^2 6*x])) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/mtimes.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mtimes.m +***** test + syms x + f(x) = x^2; + assert( isa(f * f, 'symfun')) + assert( isa(f * x, 'symfun')) +1 test, 1 passed, 0 known failure, 0 skipped +[inst/@symfun/private_disp_name.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/private_disp_name.m +***** test + syms f(x) + s = private_disp_name(f, 'f'); + assert (strcmp (s, 'f(x)')) +***** test + syms x y + g(y, x) = x + y; + s = private_disp_name(g, 'g'); + assert (strcmp (s, 'g(y, x)')) +***** test + syms f(x) + assert (isempty (private_disp_name(f, ''))) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/@symfun/minus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/minus.m +***** test + syms x + f(x) = x^2; + assert( isa(f - f, 'symfun')) + assert( isa(f - x, 'symfun')) +***** test + % Octave bug #42735 fixed in 4.4.2 + syms x + f(x) = x^2; + g = x^2; + if (exist('OCTAVE_VERSION', 'builtin') && ... + compare_versions (OCTAVE_VERSION (), '4.4.2', '<')) + s = warning('off', 'OctSymPy:sym:arithmetic:workaround42735'); + else + s = warning(); + end + h = x - f; assert(isa(h, 'symfun') && isequal(h.sym, x - g)) + h = x + f; assert(isa(h, 'symfun') && isequal(h.sym, x + g)) + h = x * f; assert(isa(h, 'symfun') && isequal(h.sym, x * g)) + h = x / f; assert(isa(h, 'symfun') && isequal(h.sym, x / g)) + h = x ^ f; assert(isa(h, 'symfun') && isequal(h.sym, x ^ g)) + h = x .* f; assert(isa(h, 'symfun') && isequal(h.sym, x .* g)) + h = x ./ f; assert(isa(h, 'symfun') && isequal(h.sym, x ./ g)) + h = x .^ f; assert(isa(h, 'symfun') && isequal(h.sym, x .^ g)) + warning(s); +***** test + % different variables + syms x y + f(x) = 2*x; + g(y) = sin(y); + h = f - g(x); + assert( isa(h, 'symfun')) + assert( isequal (argnames (h), argnames (f))) + assert( isequal (h.sym, 2*x - sin(x))) + % and even if rh-sym has a dummy variable: + h = f - g(y); + assert( isa(h, 'symfun')) + assert( isequal (argnames (h), argnames(f))) + assert( isequal (h.sym, 2*x - sin(y))) +***** test + % different variables, f has more + syms x y + f(x,y) = 2*x*y; + g(y) = sin(y); + h = f - g(y) + g(x); + assert( isa(h, 'symfun')) + assert( isequal (argnames (h), argnames (f))) + assert( isequal (h.sym, 2*x*y - sin(y) + sin(x))) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/@symfun/uminus.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/uminus.m +***** test + % Issue #447 + syms x + f(x) = x^2; + assert (isa (-f, 'symfun')) +***** test + syms f(x) + h = -f; + assert (isa (h, 'symfun')) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/@symfun/power.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/power.m @@ -13422,6 +13458,62 @@ assert( isa(h, 'symfun')) assert( isequal (h.sym, [x^x 8*x^3])) 2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/numel.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/numel.m +***** test + syms x + f(x) = x^2; + assert(numel(f)==1) +***** test + syms x + f(x) = [1 x]; + assert(numel(f)==1) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/size.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/size.m +***** test + syms x + f(x) = x; + d = size(f); + assert (isequal (d, [1 1])) + [n, m] = size(f); + assert (isequal ([n m], [1 1])) + assert (size(f, 1) == 1) + assert (size(f, 2) == 1) +***** test + syms x + f(x) = [1 x]; + d = size(f); + assert (isequal (d, [1 1])) + [n, m] = size(f); + assert (isequal ([n m], [1 1])) + assert (size(f, 1) == 1) + assert (size(f, 2) == 1) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/subsref.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/subsref.m +***** test + syms x + f(x) = x^2; + v = f.vars; + assert(iscell(v)) + assert(length(v)==1) + assert(isequal(v{1},x)) +***** test + %% pass through to sym properties + syms x + f(x) = x^2; + y = x^2; % not a symfun + assert(strcmp(f.flat, y.flat)) +2 tests, 2 passed, 0 known failure, 0 skipped +[inst/@symfun/mrdivide.m] +>>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mrdivide.m +***** test + syms x + f(x) = x^2; + assert( isa(f/f, 'symfun')) + assert( isa(f/x, 'symfun')) +1 test, 1 passed, 0 known failure, 0 skipped [inst/@symfun/symfun.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/symfun.m ***** error symfun (1, sym('x'), 3) @@ -13580,34 +13672,6 @@ syms x f(2*x) = 4*x; 25 tests, 25 passed, 0 known failure, 0 skipped -[inst/@symfun/mpower.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mpower.m -***** test - syms x - f(x) = 2*x; - h = f^f; - assert( isa(h, 'symfun')) - assert( isequal(h.sym, (2*x)^(2*x))) - h = f^sym(2); - assert( isa(h, 'symfun')) - assert( isequal(h.sym, 4*x^2)) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@symfun/mtimes.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/mtimes.m -***** test - syms x - f(x) = x^2; - assert( isa(f * f, 'symfun')) - assert( isa(f * x, 'symfun')) -1 test, 1 passed, 0 known failure, 0 skipped -[inst/@symfun/ldivide.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/ldivide.m -***** test - syms x - f(x) = x^2; - assert( isa(f .\ f, 'symfun')) - assert( isa(f .\ x, 'symfun')) -1 test, 1 passed, 0 known failure, 0 skipped [inst/@symfun/isequaln.m] >>>>> /build/octave-symbolic-2.7.1/inst/@symfun/isequaln.m ***** error isequaln (symfun('x + 1', x)) @@ -13644,278 +13708,111 @@ g(x, y) = symfun(nan, x); assert (~ isequaln (f, g)) 7 tests, 7 passed, 0 known failure, 0 skipped -[inst/@symfun/private_disp_name.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/private_disp_name.m -***** test - syms f(x) - s = private_disp_name(f, 'f'); - assert (strcmp (s, 'f(x)')) -***** test - syms x y - g(y, x) = x + y; - s = private_disp_name(g, 'g'); - assert (strcmp (s, 'g(y, x)')) -***** test - syms f(x) - assert (isempty (private_disp_name(f, ''))) -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@symfun/formula.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/formula.m -***** test - % simple - syms x - f(x) = sin(x); - g = formula(f); - assert (isequal (g, sin(x))); -***** test - % concrete: return is a sym, not a symfun - syms x - f(x) = sin(x); - g = formula(f); - assert (~isa(g, 'symfun')); -***** test - % abstract: return is a sym, not a symfun - syms f(x) - g = formula(f); - assert (~isa(g, 'symfun')); -3 tests, 3 passed, 0 known failure, 0 skipped -[inst/@symfun/times.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/times.m -***** test - syms x - f(x) = x^2; - assert( isa(f .* f, 'symfun')) - assert( isa(f .* x, 'symfun')) -***** test - syms x - f(x) = [x 2*x]; - h = f.*[x 3]; - assert( isa(h, 'symfun')) - assert( isequal (h.sym, [x^2 6*x])) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@symfun/size.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/size.m -***** test - syms x - f(x) = x; - d = size(f); - assert (isequal (d, [1 1])) - [n, m] = size(f); - assert (isequal ([n m], [1 1])) - assert (size(f, 1) == 1) - assert (size(f, 2) == 1) -***** test - syms x - f(x) = [1 x]; - d = size(f); - assert (isequal (d, [1 1])) - [n, m] = size(f); - assert (isequal ([n m], [1 1])) - assert (size(f, 1) == 1) - assert (size(f, 2) == 1) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@symfun/diff.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/diff.m -***** test - % concrete fcn - syms x - f(x) = x*x; - g(x) = 2*x; - assert (logical (diff(f) == g)) - assert (isa (diff(f), 'symfun')) -***** test - % abstract fcn - syms y(x) - assert (logical (diff(y) == diff(y(x)))) - assert (isa (diff(y), 'symfun')) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/@symfun/minus.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/minus.m -***** test - syms x - f(x) = x^2; - assert( isa(f - f, 'symfun')) - assert( isa(f - x, 'symfun')) -***** test - % Octave bug #42735 fixed in 4.4.2 - syms x - f(x) = x^2; - g = x^2; - if (exist('OCTAVE_VERSION', 'builtin') && ... - compare_versions (OCTAVE_VERSION (), '4.4.2', '<')) - s = warning('off', 'OctSymPy:sym:arithmetic:workaround42735'); - else - s = warning(); - end - h = x - f; assert(isa(h, 'symfun') && isequal(h.sym, x - g)) - h = x + f; assert(isa(h, 'symfun') && isequal(h.sym, x + g)) - h = x * f; assert(isa(h, 'symfun') && isequal(h.sym, x * g)) - h = x / f; assert(isa(h, 'symfun') && isequal(h.sym, x / g)) - h = x ^ f; assert(isa(h, 'symfun') && isequal(h.sym, x ^ g)) - h = x .* f; assert(isa(h, 'symfun') && isequal(h.sym, x .* g)) - h = x ./ f; assert(isa(h, 'symfun') && isequal(h.sym, x ./ g)) - h = x .^ f; assert(isa(h, 'symfun') && isequal(h.sym, x .^ g)) - warning(s); -***** test - % different variables - syms x y - f(x) = 2*x; - g(y) = sin(y); - h = f - g(x); - assert( isa(h, 'symfun')) - assert( isequal (argnames (h), argnames (f))) - assert( isequal (h.sym, 2*x - sin(x))) - % and even if rh-sym has a dummy variable: - h = f - g(y); - assert( isa(h, 'symfun')) - assert( isequal (argnames (h), argnames(f))) - assert( isequal (h.sym, 2*x - sin(y))) -***** test - % different variables, f has more - syms x y - f(x,y) = 2*x*y; - g(y) = sin(y); - h = f - g(y) + g(x); - assert( isa(h, 'symfun')) - assert( isequal (argnames (h), argnames (f))) - assert( isequal (h.sym, 2*x*y - sin(y) + sin(x))) -4 tests, 4 passed, 0 known failure, 0 skipped -[inst/@symfun/isequal.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/isequal.m -***** error isequal (symfun('x + 1', x)) -***** test - syms x y - f(x) = 2*x; - g(x) = 2*x; - assert (isequal (f, g)) -***** test - syms x - f(x) = 2*x + 1; - g(x) = 2*x + 1; - h(x) = 2*x + 1; - assert (isequal (f, g, h)) -***** test - syms x - f(x) = 2*x + 1; - g(x) = 2*x + 1; - h(x) = 2*x; - assert (~ isequal (f, g, h)) -***** test - syms x y - f(x) = 2*x; - g(x, y) = 2*x; - assert (~ isequal (f, g)) -***** test - syms x y - f(x) = symfun(nan, x); - g(x) = symfun(nan, x); - assert (~ isequal (f, g)) -6 tests, 6 passed, 0 known failure, 0 skipped -[inst/@symfun/subsref.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@symfun/subsref.m -***** test - syms x - f(x) = x^2; - v = f.vars; - assert(iscell(v)) - assert(length(v)==1) - assert(isequal(v{1},x)) -***** test - %% pass through to sym properties - syms x - f(x) = x^2; - y = x^2; % not a symfun - assert(strcmp(f.flat, y.flat)) -2 tests, 2 passed, 0 known failure, 0 skipped -[inst/assumptions.m] ->>>>> /build/octave-symbolic-2.7.1/inst/assumptions.m +[inst/assume.m] +>>>>> /build/octave-symbolic-2.7.1/inst/assume.m +***** error + a = assume('a', 'real') +***** error + assume positive integer +***** error + assume x y +***** error + assume x clear real +***** error + assume a>0 +***** error + assume 'x/pi' integer ***** test syms x - assert(isempty(assumptions(x))) -***** test - x = sym('x', 'positive'); + assume x positive a = assumptions(x); - assert(~isempty(strfind(a{1}, 'positive'))) + assert(strcmp(a, 'x: positive')) + assume x even + a = assumptions(x); + assert(strcmp(a, 'x: even')) ***** test + % multiple assumptions syms x - assert(isempty(assumptions(x))) + assume x positive integer + [tilde, a] = assumptions(x, 'dict'); + assert(a{1}.integer) + assert(a{1}.positive) ***** test - clear variables % for matlab test script + % does workspace syms x positive - assert(~isempty(assumptions())) + x2 = x; + f = sin(x); + assume x negative + a = assumptions(x); + assert(strcmp(a, 'x: negative')) + a = assumptions(x2); + assert(strcmp(a, 'x: negative')) + a = assumptions(f); + assert(strcmp(a, 'x: negative')) +***** error + % does not create new variable x clear x - assert(isempty(assumptions())) -***** test - % make sure we have at least these possible assumptions - A = {'real' 'positive' 'negative' 'integer' 'even' 'odd' 'rational'}; - B = assumptions('possible'); - assert (isempty (setdiff(A, B))) -***** test - A = assumptions('possible'); - for i = 1:length(A) - x = sym('x', A{i}); - a = assumptions(x); - assert(strcmp(a{1}, ['x: ' A{i}] )) - s1 = sympy (x); - s2 = ['Symbol(''x'', ' A{i} '=True)']; - assert (strcmp (s1, s2)) - end + assume x real +***** error + % no explicit variable named x + clear x + f = 2*sym('x'); + assume x real ***** test + % clear does workspace syms x positive - syms y real - syms z - f = x*y*z; - a = assumptions(f); - assert(length(a) == 2) - assert(~isempty(strfind(a{1}, 'positive'))) - assert(~isempty(strfind(a{2}, 'real'))) + f = 2*x; + assume x clear + assert (isempty (assumptions (f))); + assert (isempty (assumptions ())); ***** test - % dict output - syms x positive - syms y real - syms z - f = x*y*z; - [v, d] = assumptions(f, 'dict'); - assert(length(v) == 2) - assert(iscell(v)) - assert(isa(v{1}, 'sym')) - assert(isa(v{2}, 'sym')) - assert(length(d) == 2) - assert(iscell(d)) - assert(isstruct(d{1})) - assert(isstruct(d{2})) + syms x y + f = sin (2*x); + assume x y real + assert (strcmp (assumptions (x), 'x: real')) + assert (strcmp (assumptions (y), 'y: real')) + assert (strcmp (assumptions (f), 'x: real')) ***** test - %% assumptions on just the vars in an expression - clear variables % for matlab test script - syms x y positive - f = 2*x; - assert(length(assumptions(f))==1) - assert(length(assumptions())==2) + syms x y + f = sin (2*x); + assume x y positive even + assert (strcmp (assumptions (x), 'x: positive, even') || strcmp (assumptions (x), 'x: even, positive')) + assert (strcmp (assumptions (y), 'y: positive, even') || strcmp (assumptions (y), 'y: even, positive')) + assert (strcmp (assumptions (f), 'x: positive, even') || strcmp (assumptions (f), 'x: even, positive')) ***** test - %% assumptions in cell/struct - clear variables % for matlab test script - syms x y z w positive - f = {2*x [1 2 y] {1, {z}}}; - assert(length(assumptions())==4) - assert(length(assumptions(f))==3) - clear x y z w - assert(length(assumptions())==3) - assert(length(assumptions(f))==3) + % works from variable names not symbols + syms x y + a = [x y]; + assume a real + assert (strcmp (assumptions (x), 'x: real')) + assert (strcmp (assumptions (y), 'y: real')) ***** test - % multiple assumptions - n = sym('n', 'negative', 'even'); - assert (logical (n < 0)) - assert (~(logical (n > 0))) - assert (~(logical (n == -1))) + % works from variable names not symbols + y = sym('x'); + f = 2*y; + assume y real + assert (strcmp (assumptions (f), 'x: real')) ***** test - % multiple assumptions: eqn neither true nor false - n = sym('n', 'negative', 'even'); - assert (~isequal (n, sym(true)) && ~isequal (n, sym(false))) + % matrix of symbols + syms a b c d + A = [a b; c d]; + assume A real + assert (strcmp (assumptions (a), 'a: real')) + assert (strcmp (assumptions (b), 'b: real')) + assert (strcmp (assumptions (c), 'c: real')) + assert (strcmp (assumptions (d), 'd: real')) ***** test - %% TODO: rewrite later with https://github.com/cbm755/octsympy/issues/622 - a = python_cmd ('return Symbol("a", real=False)'); - assert (strcmp (assumptions (a), {'a: ~real'})) -13 tests, 13 passed, 0 known failure, 0 skipped + % assume after symfun + clear x + syms f(x) + assume x real + assert (~ isempty (assumptions (formula (f)))) + assert (~ isempty (assumptions (argnames (f)))) +18 tests, 18 passed, 0 known failure, 0 skipped +[inst/octsympy_tests.m] +>>>>> /build/octave-symbolic-2.7.1/inst/octsympy_tests.m +***** assert(true) +1 test, 1 passed, 0 known failure, 0 skipped [inst/laguerreL.m] >>>>> /build/octave-symbolic-2.7.1/inst/laguerreL.m ***** assert (isequal (laguerreL (0, rand), 1)) @@ -13972,177 +13869,314 @@ ***** assert (isa (laguerreL (1, single ([1 2])), 'single')) ***** assert (isa (laguerreL ([1 2], single ([1 2])), 'single')) 17 tests, 17 passed, 0 known failure, 0 skipped -[inst/syms.m] ->>>>> /build/octave-symbolic-2.7.1/inst/syms.m +[inst/catalan.m] +>>>>> /build/octave-symbolic-2.7.1/inst/catalan.m +***** error catalan (sym(1)) +***** assert (double (catalan ()) > 0.915965594177) +***** assert (double (catalan ()) < 0.915965594178) +3 tests, 3 passed, 0 known failure, 0 skipped +[inst/fibonacci.m] +>>>>> /build/octave-symbolic-2.7.1/inst/fibonacci.m +***** assert (isequal ( fibonacci (sym(0)), 0)) +***** assert (isequal ( fibonacci (sym(14)), sym(377))) +***** assert (isequal ( fibonacci (14), 377)) +***** test syms x + assert (isequal (fibonacci (5,x), x^4 + 3*x^2 + 1)) +4 tests, 4 passed, 0 known failure, 0 skipped +[inst/lambertw.m] +>>>>> /build/octave-symbolic-2.7.1/inst/lambertw.m +***** assert (isequal (lambertw (0), 0)) +***** assert (isequal (lambertw (0, 0), 0)) +***** assert (lambertw (-1/exp(1)), -1, 2*eps) +***** assert (lambertw (0, -1/exp(1)), -1, 2*eps) +***** assert (lambertw (-1, -1/exp(1)), -1, 2*eps) ***** test - %% assumptions - syms x real - x2 = sym('x', 'real'); - assert (isequal (x, x2)) + x = [1 2 3 pi 10 100 1000 12345]; + W = lambertw (x); + assert (W.*exp (W), x, -3*eps) ***** test - %% assumptions and clearing them - syms x real - f = {x {2*x}}; - A = assumptions(); - assert ( ~isempty(A)) - s = warning ('off', 'OctSymPy:deprecated'); - syms x clear - warning (s) - A = assumptions(); - assert ( isempty(A)) + x = [1 2 3 pi 10 100 1000 12345]; + k = [-3 -2 -1 0 1 2 3 4]; + W = lambertw (k, x); + assert (W.*exp (W), x, -10*eps) ***** test - % SMT compat, syms x clear should add x to workspace - syms x real - f = 2*x; - clear x - assert (~logical(exist('x', 'var'))) - s = warning ('off', 'OctSymPy:deprecated'); - syms x clear - warning (s) - assert (logical(exist('x', 'var'))) -***** error - syms x positive y -***** error - % this sometimes catches typos or errors in assumption names - % (if you need careful checking, use sym not syms) - syms x positive evne -***** error - syms x positive clear -***** error - syms x clear y -***** error - syms positive integer + % input shape preserved + x = [0 1; 2 3]; + b = x; + W = lambertw (b, x); + assert (W.*exp (W), x, -10*eps) ***** test - % does not create a variable called positive - syms x positive integer - assert (logical(exist('x', 'var'))) - assert (~logical(exist('positive', 'var'))) + % input shape preserved + x = [0 1; 2 3]; + b = 0; + W = lambertw (b, x); + assert (W.*exp (W), x, -10*eps) ***** test - % Issue #885 - syms S(x) I(x) O(x) + % input shape preserved + x = 10; + b = [0 1; 2 3]; + W = lambertw (b, x); + assert (W.*exp (W), x*ones (size (b)), -10*eps) +***** assert (isnan (lambertw (nan))) ***** test - % Issue #290 - syms FF(x) - syms ff(x) - syms Eq(x) + % limiting behaviour as z large + k = 3; + A = lambertw (k, 1e100); + assert (abs (imag (A) - 2*pi*k) < 0.1) ***** test - % Issue #290 - syms beta(x) + % limiting behaviour as z large, up imag axis + k = 1; + A = lambertw (k, 1e100*1i); + assert (abs (imag (A) - (2*k+0.5)*pi) < 0.1) ***** test - syms x real - syms f(x) - assert (~ isempty (assumptions (x))) + % limiting behaviour as z large, down imag axis + k = -2; + A = lambertw (k, -1e100*1i); + assert (abs (imag (A) - (2*k-0.5)*pi) < 0.1) ***** test - syms x real - f(x) = symfun(sym('f(x)'), x); - assert (~ isempty (assumptions (x))) - assert (~ isempty (assumptions (argnames (f)))) -14 tests, 14 passed, 0 known failure, 0 skipped -[inst/eulergamma.m] ->>>>> /build/octave-symbolic-2.7.1/inst/eulergamma.m -***** error catalan (sym(1)) -***** assert (double (eulergamma ()) > 0.577215664901) -***** assert (double (eulergamma ()) < 0.577215664902) + % limiting behaviour as z large, near branch + k = 3; + A = lambertw (k, -1e100); + B = lambertw (k, -1e100 + 1i); + C = lambertw (k, -1e100 - 1i); + assert (abs (imag (A) - (2*k+1)*pi) < 0.1) + assert (abs (imag (B) - (2*k+1)*pi) < 0.1) + assert (abs (imag (C) - (2*k-1)*pi) < 0.1) +***** test + % infinities and nan + A = lambertw ([inf exp(1) -inf nan]); + B = [inf 1 inf + pi*1i nan]; + assert (isequaln (A, B)) +***** test + % infinities and nan + A = lambertw (3, [inf 1 -inf nan]); + B = [inf + 2*3*pi*1i lambertw(3,1) inf + (2*3+1)*pi*1i nan]; + assert (isequaln (A, B)) +***** test + % infinities and nan + A = lambertw ([0 1 2 0], [inf -inf nan exp(1)]); + B = [inf inf+3*pi*1i nan 1]; + assert (isequaln (A, B)) +***** test + % scalar infinity z, vector b + A = lambertw ([1 2 -3], inf); + B = [lambertw(1, inf) lambertw(2, inf) lambertw(-3, inf)]; + assert (isequal (A, B)) +***** test + % scalar -infinity z, vector b + A = lambertw ([1 2 -3], -inf); + B = [lambertw(1, -inf) lambertw(2, -inf) lambertw(-3, -inf)]; + assert (isequal (A, B)) +***** test + % scalar z nan, vector b + A = lambertw ([1 2 -3], nan); + B = [nan nan nan]; + assert (isequaln (A, B)) +21 tests, 21 passed, 0 known failure, 0 skipped +[inst/finiteset.m] +>>>>> /build/octave-symbolic-2.7.1/inst/finiteset.m +***** test + s1 = finiteset(sym(1), 2, 2); + s2 = finiteset(sym(1), 2, 2, 2); + assert (isequal (s1, s2)) +***** test + s1 = finiteset(sym(0), 1); + s2 = finiteset(sym(0), 2, 3); + s = finiteset(sym(0), 1, 2, 3); + assert (isequal (s1 + s2, s)) +***** test + e = finiteset(); + s = finiteset(sym(1)); + s2 = e + s; + assert (isequal (s, s2)) 3 tests, 3 passed, 0 known failure, 0 skipped -[inst/vpasolve.m] ->>>>> /build/octave-symbolic-2.7.1/inst/vpasolve.m +[inst/heaviside.m] +>>>>> /build/octave-symbolic-2.7.1/inst/heaviside.m +***** assert (heaviside (0) == 0.5) +***** assert (isnan (heaviside (nan))) +***** assert (isequal (heaviside ([-inf -eps 0 eps inf]), [0 0 0.5 1 1])) +***** assert (isequaln (heaviside ([-1 1 nan]), [0 1 nan])) +***** assert (heaviside (0, 1) == 1) +***** error heaviside (1i) +***** assert (isa (heaviside (single (0)), 'single')) +7 tests, 7 passed, 0 known failure, 0 skipped +[inst/dirac.m] +>>>>> /build/octave-symbolic-2.7.1/inst/dirac.m +***** assert (isinf (dirac (0))) +***** assert (dirac (1) == 0) +***** assert (isnan (dirac (nan))) +***** assert (isequaln (dirac ([-1 1 0 eps inf -inf nan]), [0 0 inf 0 0 0 nan])) +***** error dirac (1i) +***** assert (isa (dirac (single (0)), 'single')) +6 tests, 6 passed, 0 known failure, 0 skipped +[inst/vpa.m] +>>>>> /build/octave-symbolic-2.7.1/inst/vpa.m ***** test - syms x - vpi = vpa(sym(pi), 64); - e = tan(x/4) == 1; - q = vpasolve(e, x, 3.0); - w = q - vpi ; - assert (double(w) < 1e-30) + a = vpa(0, 4); + b = double(a); + assert(b == 0) ***** test - syms x - vpi = vpa(sym(pi), 64); - e = tan(x/4) == 1; - q = vpasolve(e, x); - w = q - vpi; - assert (double(w) < 1e-30) - q = vpasolve(e); - w = q - vpi; - assert (double(w) < 1e-30) + a = vpa(pi, 4); + b = sin(a); + assert(abs(double(b)) < 1e-4) ***** test - % very accurate pi - syms x - e = tan(x/4) == 1; - m = digits(256); - q = vpasolve(e, x, 3); - assert (double(abs(sin(q))) < 1e-256) - digits(m); + % vpa from double is ok, doesn't warn (c.f., sym(2.3)) + a = vpa(2.3); + assert(true) ***** test - % very accurate sqrt 2 - syms x - e = x*x == 2; - m = digits(256); - q = vpasolve(e, x, 1.5); - assert (double(abs(q*q - 2)) < 1e-256) - digits(m); + % vpa from double not more than 16 digits + a = vpa(sqrt(pi), 32); + b = sin(a^2); + assert(abs(double(b)) > 1e-20) + assert(abs(double(b)) < 1e-15) ***** test - % very accurate sqrt pi - % (used to fail https://github.com/sympy/sympy/issues/8564) - syms x - e = x*x == sym(pi); - m = digits(256); - q = vpasolve(e, x, 3); - assert (double(abs(sin(q*q))) < 1e-256) - digits(m); + a = vpa(sym(pi), 32); + b = sin(a); + assert(abs(double(b)) < 1e-30) ***** test - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x - r = vpasolve(x^2 + 2 == 0, x, 1i); - assert (double (imag(r)^2 - 2), 0, 1e-32) - assert (double (real(r)^2), 0, 1e-32) - r = vpasolve(x^2 + 2 == 0, x, -3i + 5); - assert (double (imag(r)^2 - 2), 0, 1e-32) - assert (double (real(r)^2), 0, 1e-32) - end + a = vpa(sym(pi), 256); + b = sin(a); + assert(abs(double(b)) < 1e-256) ***** test - % system - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x y - f = 3*x^2 - 2*y^2 - 1; - g = x^2 - 2*x + y^2 + 2*y - 8; - r = vpasolve([f; g], [x; y], sym([-1; 1])); - assert (isa (r, 'sym')) - assert (numel (r) == 2) - end + % pi str + a = vpa('pi', 32); + b = sin(a); + assert(abs(double(b)) < 1e-32) ***** test - % system, double guess - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x y - f = 3*x^2 - 2*y^2 - 1; - g = x^2 - 2*x + y^2 + 2*y - 8; - r = vpasolve([f; g], [x; y], [-1.1 1.2]); - end + % pi str + a = vpa('pi', 32); + b = vpa(sym('pi'), 32); + assert (double (a - b) == 0) ***** test - % system, double guess - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x y - f = 3*x^2 - 2*y^2 - 1; - g = x^2 - 2*x + y^2 + 2*y - 8; - r1 = vpasolve([f; g], [x; y], [-1.1]); - r2 = vpasolve([f; g], [x; y], [-1.1 -1.1]); - assert (isequal (r1, r2)) - end + spi = sym(pi); + a = vpa(spi, 10); + b = double(a); + assert(~isAlways(spi == a)) ***** test - % system, more eqns than unknowns - if (python_cmd ('return Version(spver) > Version("1.0")')) - syms x y - eqns = [x^3 - x - y == 0; y*exp(x) == 16; log(y) + x == 4*log(sym(2))]; - r = vpasolve (eqns, [x; y], [1; 1]); - A = subs (lhs (eqns), [x; y], r); - err = A - [0; 16; 4*log(sym(2))]; - assert (double (err), zeros (size (err)), 1e-31) + % matrix of sym + a = [sym(pi) 0; sym(1)/2 1]; + b = [pi 0; 0.5 1]; + c = vpa(a, 6); + assert(max(max(abs(double(c)-b))) < 1e-6) +***** test + % matrix of double + b = [pi 0; 0.5 1]; + c = vpa(b, 6); + assert(max(max(abs(double(c)-b))) < 1e-6) +***** test + % integer type + a = vpa(int32(6), 64); + b = vpa(6, 64); + assert (isequal (a, b)) +***** test + % matrix of int + b = int32([pi 0; 6.25 1]); + c = vpa(b, 6); + assert (isequal (double(c), [3 0; 6 1])) +***** test + % can pass pi directly to vpa + a = vpa(sym(pi), 128); + b = vpa(pi, 128); + assert (isequal (a, b)) +***** test + % if sym does sth special for e so should vpa + a = vpa(sym(exp(1)), 64); + b = vpa(exp(1), 64); + assert (isequal (a, b)) +***** test + % can pass pi directly to vpa, even in array + a = vpa(sym([2 pi]), 128); + b = vpa([2 pi], 128); + assert (isequal (a, b)) +***** test + % can pass i directly to vpa + a = vpa(sym(i)); + b = vpa(i); +***** test + % 'i' and 'I' just make vars + a = vpa(sym(1i)); + b = vpa('i'); + c = vpa('I'); + assert (~isequal (a, b)) + assert (~isequal (a, c)) +***** test + % '1i' and '1j' strings + a = vpa(sym(1i)); + b = vpa('1i'); + c = vpa('1j'); + assert (isequal (a, b)) + assert (isequal (a, c)) +***** test + % Issue #868, precision loss on '0.33j' + a = vpa('0.33j', 40); + b = vpa('0.33i', 40); + assert (double (abs (imag (a)*100/33) - 1) < 1e-39) + assert (isequal (a, b)) +***** test + % inf/-inf do not become symbol('inf') + S = {'oo', '-oo', 'inf', 'Inf', '-inf', '+inf'}; + for j = 1:length(S) + a = vpa(S{j}); + b = vpa(sym(S{j})); + assert (isequal (a, b)) end -10 tests, 10 passed, 0 known failure, 0 skipped -[inst/@logical/isAlways.m] ->>>>> /build/octave-symbolic-2.7.1/inst/@logical/isAlways.m -***** error isAlways (true, false) -***** assert(isAlways(true)) -***** assert(~isAlways(false)) -3 tests, 3 passed, 0 known failure, 0 skipped +***** test + a = vpa('2.3', 20); + s = strtrim(disp(a, 'flat')); + assert (strcmp (s, '2.3000000000000000000')) +***** test + % these should *not* be the same + a = vpa(2.3, 40); + b = vpa('2.3', 40); + sa = sympy (a); + sb = sympy (b); + assert (~isequal (a, b)) + assert (abs(double(a - b)) > 1e-20) + assert (abs(double(a - b)) < 1e-15) + assert (~strcmp(sa, sb)) +***** test + % these should *not* be the same + x = vpa('1/3', 32); + y = vpa(sym(1)/3, 32); + z = vpa(1/3, 32); + assert (isequal (x, y)) + assert (~isequal (x, z)) +***** test + % big integers + a = int64(12345678); + a = a*a; + b = vpa(a); + c = vpa('152415765279684'); + assert (isequal (b, c)) +***** test + % big integers (workaround poor num2str, works in 4.0?) + a = int64(1234567891); a = a*a; + b = vpa(a); + c = vpa('1524157877488187881'); + assert (isequal (b, c)) +***** warning vpa ('sqrt(2.0)'); +***** warning + % https://github.com/sympy/sympy/issues/13425 + a = vpa('2**0.5'); + b = vpa(sqrt(sym(2))); + assert (isequal (a, b)) +***** test + a = vpa('2.3e1'); + b = vpa(' 2.3e+1 '); + assert (isequal (a, b)) + a = vpa('21e-1'); + b = vpa('2.1'); + assert (isequal (a, b)) +***** test + % Issue #859, operations on immutable matrices + x = vpa (sym ([1 2])); + % If vpa no longer makes an ImmutableDenseMatrix, + % may need to adjust or remove this test. + assert (~ isempty (strfind (sympy (x), 'Immutable'))) + y = sin(x); + y2 = [sin(vpa(sym(1))) sin(vpa(sym(2)))]; + assert (isequal (y, y2)) +30 tests, 30 passed, 0 known failure, 0 skipped Checking C++ files ... Summary: 2229 tests, 2203 passed, 26 known failures, 0 skipped @@ -14170,12 +14204,14 @@ dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) I: copying local configuration +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/14301/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/64655 and its subdirectories -I: Current time: Wed Jul 21 05:25:07 -12 2021 -I: pbuilder-time-stamp: 1626888307 +I: removing directory /srv/workspace/pbuilder/14301 and its subdirectories +I: Current time: Fri Jun 19 01:33:12 +14 2020 +I: pbuilder-time-stamp: 1592479992